Четверг, 04 Май 2017 08:53

OpenCart: Дополнительные поля товара (ч.2)

В прошлом материале разобрал, каким путём добавляются дополнительные поля в панели администратора, но одним только их добавлением в базу дело не заканчивается, нужно так же и вывод на сайте организовать.

Собственно на этом и начинается ЭТАП 2 – Вывод дополнительного поля, на позиции сайта, данный материал так же писал на базе чужой инструкции custom product fields:

Новое поле необходимо добавить на три страницы: «Страницу продукта», «Страницу сравнения», «Страницу поиска».

Начнём со страницы продукта – открываем catalog/language/en-gb/product/product.phpcatalog/language/ru-ru/product/product.php, если есть русификация)

И добавляем строку:

$_['text_custom_desc'] = 'Custom Description:';

В каталоге "ru":

$_['text_custom_desc'] = 'Описание добавленного поля:';

Как Вы, наверное, уже догадались вместо строк «описания» нужно написать тот текст, который Вам необходим. Следующим шагом открываем catalog/model/catalog/product.php и в функции getProduct() ищем:

'isbn' => $query->row['isbn'],

После которой, добавляем:

'custom_desc' => $query->row['custom_desc'],

Теперь открываем catalog/controller/product/product.php и ищем следующий код:

$data['text_loading'] = $this->language->get('text_loading');

После которой, добавляем:

$data['text_custom_desc'] = $this->language->get('text_custom_desc');

Теперь ищем:

$data['entry_bad'] = $this->language->get('entry_bad');

И добавляем строку:

$data['entry_custom_desc'] = $this->language->get('entry_custom_desc');

И добавляем строку:

$data['entry_custom_desc'] = $this->language->get('entry_custom_desc');

Теперь добавляем в поиск:

$data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8');

ВНИМАНИЕ: Если Вы пользуетесь ckeditor, то искать необходимо такую строку:

$data['custom_desc'] = html_entity_decode($product_info['custom_desc'], ENT_QUOTES, 'UTF-8');

После, добавляем:

$data['custom_desc'] = $product_info['custom_desc'];

Теперь ищем:

'special' => $special,

и добавляем после:

'custom_desc' => $result['custom_desc'],

Теперь открываем catalog/view/theme/default/template/product/product.tpl и здесь нам придётся выбирать, куда разместить добавленный блок. В качестве примера рассмотрим следующую позицию, найдём:

<div class="tab-pane active" id="tab-description"><?php echo $description; ?>

Сразу после кода, в контейнере div добавляем этот код:

<?php echo $custom_desc;?>

Вы сами можете поэкспериментировать с выводом блока и его размещением на нужной Вам позиции.


Переходим на страницу поиска. Для этого откроем файл catalog/controller/product/search.php и ищем следующую строку $data['products'][] = array далее после этой строки:

'price' => $price,

Добавляем следующую строку:

'custom_desc' => $result['custom_desc'],

Теперь открываем файл шаблона catalog/view/theme/default/template/product/search.tpl и после строки:

<p><?php echo $product['description']; ?></p>

Добавляем следующую строку:

<p><?php echo $product['custom_desc']; ?></p>


Финальный этап – страница сравнения. Открываем файл catalog/language/en_gb/product/compare.php (если установлен русификатор такие же действия проводим и с файлом catalog/language/ru_ru/product/compare.php) и добавляем следующую строку:

$_['text_custom_desc'] = 'Custom Description';

Как можно догадаться, вместо Custom Description может быть любое значение. Теперь откроем catalog/controller/product/compare.php и найдём строку

'model' => $product_info['model'],

Добавляем:

'custom_desc' => $product_info['custom_desc'],

Далее ищем

$data['text_summary'] = $this->language->get('text_summary');

Добавляем:

$data['text_custom_desc'] = $this->language->get('text_custom_desc');

И в завершение открываем catalog/view/theme/default/template/product/compare.tpl ищем:

<tr>
  <td><?php echo $text_summary; ?></td>
  <?php foreach ($products as $product) { ?>
  <td class="description"><?php echo $products[$product['product_id']]['description']; ?></td>
  <?php } ?>
</tr>

И добавляем следующий код:

<tr>   <td><?php echo $text_custom_desc; ?></td>   <?php foreach ($products as $product) { ?>   <td class="description"><?php echo $products[$product['product_id']]['custom_desc']; ?></td>   <?php } ?> </tr>

По аналогичному методу можно добавлять и другие доп-поля, с другими наименованиями.

Спонсоры: