Jump to content
Уважаемые пользователи! Сайт находится ещё в режиме разработки, но большая часть функционала уже доступна! ×

VirtueMart 3 добавить дополнительное поле и поиск с сортировкой по новому полю в админке.


Печенег

308 views

 Share
Followers 0

1. Выполнить SQL запрос в БД:

ALTER TABLE  `jos_virtuemart_products` ADD  `new_pole` TEXT(500) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `product_sku`

Где:

'jos_virtuemart_products' - таблица в которую добавляем столбец (колонку);

'new_pole' - название добавляемой новой колонки (столбца);

'product_sku' - добавить после указанной колонки;

TEXT(500) - тип данных, строка с максимальной длиной 500 символов. Более подробно о всех типах данных можно ознакомиться по ссылке -> типы данных 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)

  • Like 1
 Share

0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

General chat

Please enter your display name

×
×
  • Create New...

Important Information

Продолжая использовать Веб-сайт ostogramm.ru Вы автоматически соглашаетесь с Privacy Policy и Guidelines, в ином случаи просто покиньте его.