Добавить новое поле для товара в virtuemart

Эта инструкция давно уже лежит у меня txt файле.
И через файл не очень удобно просматривать пункты, тем более пока его найдешь.
А на сайте куда удобнее. И вполне возможно пригодиться не только мне.

1. В базе mysql добавить нужное поле. Например, нам нужен размер товара.
Добавляем поле `product_size` в таблицу `jos_vm_product` с помощью phpmyadmin.
В зависимости от того, как мы будем заполнять эти данные выбираем тип поля. Если в поле будут только цифры, то лучше выбрать int.


2. В файле добавить нужную форму:

/administrator/components/com_virtuemart/html/product.product_form.php

Например, мы хотим в первой вкладке после краткого описания вставить наше новое поле. Для этого находим: в файле `product_s_desc`. Видим что он находится в строке таблицы. После вставляем:

<tr><td>Размер:</td><td><input type="text" name="product_size"> </td> </tr>


3. Открываем файл:

/administrator/com_virtuemart/clases/ps_product.php

Здесь нас интересуют две функции. Первая — добавление нового товара. Ищем участок кода, содержащий `function add`. Недалеко от начала функции, после следующего участка кода находим:

// Insert into DB: $fields = array ( 'vendor_id' => $vendor_id,
...

В этот массив записываются все наши данные (потом масив запишется в БД).
В зависимости от вида наших данных копируем нужную строку, и вписываем свои данные:
Например, наше поле совпадает с числовым, поэтому можем скопировать:

'product_lwh_uom' => vmGet($d,'product_lwh_uom'),

и вместо product_lwh_uom вставляю product_size:

'product_size' => vmGet($d,'product_size'),

Если добавляем чекбокс, то надо еще добавить проверку. Находим код:

$d["product_publish"] = empty($d["product_publish"]) ? "N" : "Y";

И рядом добавляем точно такое же, только с нашим полем из БД.
Кстати, для вставки такого поля, нужно использовать: 'поле_из_бд' => $d['поле_из_бд']

Далее находим функцию изменения существующего товара "function update".
Там делаем тоже самое, что и в функции добавления.


4. Теперь нам надо вывести на сайт, данные которые мы добавляем. В файле:

/administrator/com_virtuemart/html/shop_browse_queries.php

После

// These are the names of all fields we fetch data from

Добавляем нужные поля из базы данных. Например:

$fieldnames = "`product_name`,`products_per_row`, `product_desc_2`, `product_size` ...

После того, как мы вытаскиваем нужные поля из БД, нам надо данные прописать в переменную для шаблона товара. В файле:

/administrator/com_virtuemart/html/shop.browse.php

После:

$products[$i]['product_details'] = $product_details;

Например:

$products[$i]['product_size'] = $db_browse->f("product_size");


5. Дальше в шаблонах мы прописываем, например:

<?php echo product_size; ?>

08 July 2011