1. добавляем доп.функцию для выборки. открываем /administrator/components/com_virtuemart/views/product/view.html.php и ищем функцию
static function displayLinkToChildList($product_id, $product_name) {
в конце этой функции добавляем нашу новую:
// search custom fields static function displayCustomFieldRes($product_id, $custom_id) { $db = JFactory::getDBO(); $db->setQuery("SELECT custom_value FROM #__virtuemart_product_customfields WHERE virtuemart_product_id=".$product_id." and virtuemart_custom_id=".$custom_id." ;"); if ($result = $db->loadResult()){ echo $result; } } // search custom fields
2. идем в шаблон вывода списка продуктов /administrator/components/com_virtuemart/views/product/tmpl/default.php и в нужном месте добавляем нужные колонки. на месте вывода значения доп.поля пишем следующее:
<?php VirtuemartViewProduct::displayCustomFieldRes($product->virtuemart_product_id , 6); ?>
где 6 - ID нашего кастомного поля (посмотреть можно на странице кастомных полей)
результат:
ПРОДОЛЖЕНИЕ: Добавлем поиск в админке по одному custom_field (в нашем случае номер stock #)
Открываем administrator\components\com_virtuemart\views\product\tmpl\default.php и после
<input type="text" value="<?php echo JRequest::getVar('filter_product'); ?>" name="filter_product" size="25" />
добавляем:
<input id="stock_f" type="checkbox" title="Search by STOCK #" name="stock_f" onclick="this.form.submit();">
далее идем в administrator\components\com_virtuemart\models\product.php и ищем в районе 290 строки такой кусок:
if (!empty($filter_search)) { $where[] = '(' . implode (' OR ', $filter_search) . ')'; } else { $where[] = '`product_name` LIKE ' . $keyword; $joinLang = TRUE; //If they have no check boxes selected it will default to product name at least. }
после него добавляем нашу проверку на кастомный сток номер. id его 6, поэтому сразу вписал в запрос, а предыдущие все выборки обнуляем.
if($_POST['stock_f']!=NULL) { $where = array(); $keyword = str_replace("%", "", $keyword); $where[] = 'pf.`virtuemart_custom_id`="6" and pf.`custom_value`=' . $keyword . ''; }
далее необходимо подключить выборку из нужных таблиц в селекте. ищем такой код в районе 540 строки
if ($joinChildren) { $joinedTables[] = ' LEFT OUTER JOIN `#__virtuemart_products` children ON p.`virtuemart_product_id` = children.`product_parent_id` '; }
и после него добавляем наш:
// check STOCK # if($_POST['stock_f']!=NULL) { $joinedTables[] = ' LEFT JOIN `#__virtuemart_product_customfields` as pf ON p.`virtuemart_product_id` = pf.`virtuemart_product_id` '; }
после этих манипуляций в админке появляется чекбокс (с автосабмитом формы), при клике по которму мы ищем по конкретному кастомному полю.