Выводим доп.поля в админке в Product list


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 нашего кастомного поля (посмотреть можно на странице кастомных полей)

результат:


Выводим доп.поля в админке в Product list

 

ПРОДОЛЖЕНИЕ: Добавлем поиск в админке по одному custom_field (в нашем случае номер stock #)

ПОЛЕЗНО  VirtueMart: количество продуктов у производителя

Выводим доп.поля в админке в Product list

Открываем 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` ';
		}

после этих манипуляций в админке появляется чекбокс (с автосабмитом формы), при клике по которму мы ищем по конкретному кастомному полю.