VirtueMart 3 добавить дополнительное поле и поиск с сортировкой по новому полю в админке.
1. Выполнить SQL запрос в БД:
ALTER TABLE `jos_virtuemart_products` ADD `new_pole` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `product_sku`
Где:
'jos_virtuemart_products' - таблица в которую добавляем столбец (колонку);
'new_pole' - название добавляемой новой колонки (столбца);
'product_sku' - добавить после указанной колонки;
TEXT - тип данных. Более подробно о всех типах данных можно ознакомиться по ссылке -> типы данных mysql
2. Добавляем поле в админку Virtuemart:
Находим файл /administrator/components/com_virtuemart/views/product/tmpl/product_edit_information.php и в нужном месте размещаем код
Текстовое многострочное поле <textarea>
<fieldset> <legend>Название поля или языковая переменная</legend> <textarea class="inputbox" name="new_pole" cols="65" rows="3" ><?php echo $this->product->new_pole; ?></textarea> </fieldset>
Однострочное поле <input>
<fieldset> <legend>Название поля или языковая переменная</legend> <input class="inputbox" name="new_pole" value="<?php echo $this->product->new_pole; ?>" /> </fieldset>
3. Объявить переменную:
В файле /administrator/components/com_virtuemart/tables/products.php находим var $product_sku = null; и вставляем ниже var $new_pole = null;
Если вы добавляете новое поле в таблицу jos_virtuemart_products_ru_ru то вам необходимо в конце файла найти строку
$this->setTranslatable(array('product_name', 'product_s_desc','product_desc','metadesc','metakey', 'customtitle'));
и вставить нашу переменную
$this->setTranslatable(array('new_pole', 'product_name', 'product_s_desc','product_desc','metadesc','metakey', 'customtitle'));
Всё теперь данные в поле сохраняются в БД и выводятся в админке!
4. Вывод данных поля в пользовательской части шаблона:
В нужном месте шаблона /components/com_virtuemart/views/productdetails/tmpl/default.php нужно вставить
<?php if (!empty($this->product->new_pole)) { ?> <?php echo $this->product->new_pole; ?> <?php } ?>
5. Делаем поиск и сортировку по новому полю в админке:
В файле /administrator/components/com_virtuemart/models/inventory.php находим строку
$this->addvalidOrderingFieldName(array('product_name','product_sku','product_in_stock','product_price','product_weight','published'));
и добавляем наше 'new_pole'
$this->addvalidOrderingFieldName(array('new_pole','product_name','product_sku','product_in_stock','product_price','product_weight','published'));
далее ниже в этом же файле находим строки и добавляем 'new_pole' и туда:
$select = ' `#__virtuemart_products`.`virtuemart_product_id`, `#__virtuemart_products`.`product_parent_id`, `product_name`, `new_pole`, `product_sku`, `product_in_stock`, `product_weight`, `published`, `product_price`';
В файле /administrator/com_virtuemart/models/product.php находим строки
var $valid_BE_search_fields = array('product_name', '`p`.product_sku','`l`.`slug`', 'product_s_desc', '`l`.`metadesc`');
и
if (!isset($filterArray)) { $filterArray = array('product_name', '`p`.created_on', '`p`.product_sku','`p`.product_mpn',
добавляем наше 'new_pole' в эти строки как делали ранее, получится:
var $valid_BE_search_fields = array('new_pole', 'product_name', '`p`.product_sku','`l`.`slug`', 'product_s_desc', '`l`.`metadesc`'); и if (!isset($filterArray)) { $filterArray = array('new_pole', 'product_name', '`p`.created_on', '`p`.product_sku','`p`.product_mpn',
Вот и всё поиск теперь по этому полю будет искать, а для сортировки по новому полю необходимо проделать следующее:
1. Если ваше поле выводится в столбец с общим списком то заголовок столбца должен выглядеть так
<th><?php echo $this->sort('new_pole','COM_VIRTUEMART_NEW_POLE'); ?></th>
2. В языковых файлах ru-RU.com_virtuemart.ini (для админки VirtueMart и самого магазина) прописать значения константы COM_VIRTUEMART_NEW_POLE = "Новое поле"; или переопределяем языковую константу 'COM_VIRTUEMART_NEW_POLE' в админке, присваиваем значение 'Новое поле'.
3. В настройках VirtueMart в закладке "Настройка сортировки" нужно включить наше дополнительное поле для поиска и сортировки. (Поставить галочку рядом с новым полем и сохранить настройки)
Готово!
Для написания статьи использовались источник 1 и источник 2 (Dianis)
- 1
0 Comments
Recommended Comments
There are no comments to display.