Наверное каждый кто когда-либо работал с компонентом Virtuemart замечал, что стандартных полей описания товара слишком мало. Вот и передо мной встала задача реализовать несколько дополнительных полей для вывода их в категории и в карточке товара. Как все умные и в меру ленивые люди (да-да люблю я себя (: ), решил сначала посмотреть, что пишут люди на российских и зарубежных форумах... и, о ужас, все мануалы пишутся только для вирта 1.0, в котором синтаксис координально отличается от версии 1.1. Проскальзывало несколько постов, типа: "Ура, я сумел реализовать сие чудо на вирте 1.1.3". После чего авторы сих познавательных комментов исчезали. Немного подумав и посидев над кодом нашел стабильное решение, которое безотказно работает на версиях 1.1.3 и 1.1.4. Итак приступим:
0. Для реализации нам нужен PhpMyAdmin, Dreamweaver (блокнот тож сойдет) и немного терпения.
1. Открываем базу данных нашего сайта и находим таблицу jos_vm_product. Заходим в нее, выбираем вкладку "Структура". Тут мы видим все поля нашего товара, такие как Артикул, Айди, цена и пр. Спускаемся вниз и находим "Добавить 1 поле(поля)" выбираем правее под каким полем хотим расположить наше будущее творение и жмем Ок. Теперь заполняем: Поле: product_new (можете вставить свое); Длина/значения: 64; Тип: VARCHAR; Сравнение: utf8_general_ci; Null: NOT NULL. Вдаваться в подробности за что отвечает каждая строчка не буду, таких мануалов итак полно. Остальные поля можно оставить пустыми. Сохраняем. Все... первый этап завершен.
2. После создания поля в таблице ее нужно привязать к админке сайта. Для этого идем сюда: administrator/com_virtuemart/html/product.product_form.php. В файле product.product_form.php в районе 197 строки начинается таблица, в которой формируются строки при добавлении нового товара. Оптимальнее всего размещать новое поле под артикулом. Следовательно находим строки:
3. Теперь нам нужно связать наше новое поле с базой данных нашего сайта. Для этого идем в administrator/components/com_virtuemart/classes/ps_product.php находим строчки:
4. В этом шаге мы начнем реализацию отображения нового поля в категории и карточке товара, для этого предварительно нужно отредактировать 2 файла. Сначала идем в administrator/com_virtuemart/html/shop_browse_queries.php (файл отвечает за включение поля в выборку при обращении к карточке товара или к категории). Находим строчки:
5. Открываем components/com_virtuemart/themes/default/templates/browse/ваш шаблон категории. В моем случае это browse_1. В файле можно заметить, что вывод формируется через функции вида <?php echo $product_title ?>, следовательно, чтобы вывести наше новое поле нужно вставить: <?php echo $product_new ?>. В качестве примера выкладываю примерный код шаблона категории:
0. Для реализации нам нужен PhpMyAdmin, Dreamweaver (блокнот тож сойдет) и немного терпения.
1. Открываем базу данных нашего сайта и находим таблицу jos_vm_product. Заходим в нее, выбираем вкладку "Структура". Тут мы видим все поля нашего товара, такие как Артикул, Айди, цена и пр. Спускаемся вниз и находим "Добавить 1 поле(поля)" выбираем правее под каким полем хотим расположить наше будущее творение и жмем Ок. Теперь заполняем: Поле: product_new (можете вставить свое); Длина/значения: 64; Тип: VARCHAR; Сравнение: utf8_general_ci; Null: NOT NULL. Вдаваться в подробности за что отвечает каждая строчка не буду, таких мануалов итак полно. Остальные поля можно оставить пустыми. Сохраняем. Все... первый этап завершен.
2. После создания поля в таблице ее нужно привязать к админке сайта. Для этого идем сюда: administrator/com_virtuemart/html/product.product_form.php. В файле product.product_form.php в районе 197 строки начинается таблица, в которой формируются строки при добавлении нового товара. Оптимальнее всего размещать новое поле под артикулом. Следовательно находим строки:
- <tr class="row1">
- <td width="21%" >
- <div style="text-align:right;font-weight:bold;"><?php echo $VM_LANG->
- _('PHPSHOP_PRODUCT_FORM_SKU') ?>:</div>
- </td>
- <td width="79%">
- <input type="text" class="inputbox" name="product_sku" value="<?php $db->sp("product_sku"); ?>" size="32" maxlength="64" />
- </td>
- </tr>
- <tr class="row1">
- <td width="21%" >
- <div style="text-align:right;font-weight:bold;"><?php echo $VM_LANG->_('PHPSHOP_PRODUCT_FORM_NEW') ?>:</div>
- </td>
- <td width="79%">
- <input type="text" class="inputbox" name="product_new" value="<?php $db->sp("product_new"); ?>" size="32" maxlength="64" />
- </td>
- </tr>
- <?php echo $VM_LANG->_('PHPSHOP_PRODUCT_FORM_NEW') ?>
- 'PHPSHOP_PRODUCT_FORM_SKU' => 'Артикул',
- 'PHPSHOP_PRODUCT_FORM_NEW' => 'Новое поле',
3. Теперь нам нужно связать наше новое поле с базой данных нашего сайта. Для этого идем в administrator/components/com_virtuemart/classes/ps_product.php находим строчки:
- // Insert into DB
- $fields = array ( 'vendor_id' => $vendor_id,
- 'product_parent_id' => vmRequest::getInt('product_parent_id'),
- 'product_sku' => vmGet($d,'product_sku'),
- 'product_new' => vmGet($d,'product_new'),
4. В этом шаге мы начнем реализацию отображения нового поля в категории и карточке товара, для этого предварительно нужно отредактировать 2 файла. Сначала идем в administrator/com_virtuemart/html/shop_browse_queries.php (файл отвечает за включение поля в выборку при обращении к карточке товара или к категории). Находим строчки:
- $fieldnames = "`product_name`,`products_per_row`,`category_browsepage`,`category_flypage`,`#__{vm}_category`.`category_id`,
- `#__{vm}_product`.`product_id`,`product_full_image`,`product_thumb_image`,
- `product_s_desc`,`product_parent_id`,`product_publish`,`product_in_stock`,`product_sku`,`product_url`,
- $fieldnames = "`product_name`,`products_per_row`,`category_browsepage`,`category_flypage`,`#__{vm}_category`.`category_id`,
- `#__{vm}_product`.`product_id`,`product_full_image`,`product_thumb_image`,`product_s_desc`,
- `product_parent_id`,`product_publish`,`product_in_stock`,`product_sku`,`product_new`,`product_url`,
- // Unset these for the next product
- unset($full_image_width);
- unset($full_image_height);
- $products[$i]['product_name'] = shopMakeHtmlSafe( $product_name );
- $products[$i]['product_s_desc'] = $product_s_desc;
- $products[$i]['product_details'] = $product_details;
- $products[$i]['product_rating'] = $product_rating;
- $products[$i]['product_price'] = $product_price;
- $products[$i]['product_price_raw'] = $product_price_raw;
- $products[$i]['product_sku'] = $db_browse->f("product_sku");
- $products[$i]['product_new'] = $db_browse->f("product_new");
5. Открываем components/com_virtuemart/themes/default/templates/browse/ваш шаблон категории. В моем случае это browse_1. В файле можно заметить, что вывод формируется через функции вида <?php echo $product_title ?>, следовательно, чтобы вывести наше новое поле нужно вставить: <?php echo $product_new ?>. В качестве примера выкладываю примерный код шаблона категории:
- <?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
- mm_showMyFileName(__FILE__);
- ?>
- <div class="browseProductContainer">
- <h1><a title="<?php echo $product_name ?>" href="<?php echo $product_flypage ?>">
- <?php echo $product_name ?></a>
- </h1>
- <table border="1" width="100%" style="text-align:center;">
- <tr>
- <td>
- <script type="text/javascript">//<![CDATA[
- document.write('<a href="javascript:void window.open(\'<?php echo $product_full_image ?>\', \'win2\', \'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=<?php echo $full_image_width ?>,height=<?php echo $full_image_height ?>,directories=no,location=no\');">');
- document.write( '<?php echo ps_product::image_tag( $product_thumb_image, 'class="browseProductImage" border="0" title="'.$product_name.'" alt="'.$product_name .'"' ) ?></a>' );
- //]]>
- </script>
- <noscript>
- <a href="<?php echo $product_full_image ?>" target="_blank" title="<?php echo $product_name ?>">
- <?php echo ps_product::image_tag( $product_thumb_image, 'class="browseProductImage" border="0" title="'.$product_name.'" alt="'.$product_name .'"' ) ?>
- </a>
- </noscript>
- </td>
- <td>
- <?php echo $product_new ?>
- </td>
- <td>
- <?php echo $product_s_desc ?>
- </td>
- <td>
- <?php echo $product_sku ?>
- </td>
- <td>
- <?php echo $product_price ?>
- </td>
- </tr>
- </table>
- <br />
- <span>
- <?php echo $form_addtocart ?>
- </span>
- </div>
Комментариев нет:
Отправить комментарий