Перейти к содержанию
zyto

Как сделать что бы шаблон блока товара описывался в одном месте?

Рекомендуемые сообщения

У меня в шаблоне есть множество однотипных блоков, которые выводят блок (прямоугольник) товара.

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

И если вдруг надо внести правки во внешний вид этого блока - то нужно исправить кучу файликов, типа 

category.tpl

featured.tpl

latest.tpl

и т.д.

 

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

 

Наверняка можно сделать что-то типа require или include... Но это немножко "топорно"... А есть ли у opencart'a возможность зарендерить часть шаблона из другого шаблона?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Версия Opencart 1.5.6.3

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е. мне нужно что-то типа $this->render() но не из контроллера а из шаблона (tpl).

Что-нибудь такое бывает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"мойфайл.tpl" сделайте и подключайте куда хотите

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я и спрашиваю - как в opencart правильно подключить шаблон (tpl) из другого шаблона?

можно кусочек кода?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

*сейчас в контроллере сделал так:

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/product_block.tpl')) {
            $this->data['product_template'] = DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/product_block.tpl';
  }

 

и потом в шаблоне:

<?php if(isset($this->data['product_template'])){
                            include $this->data['product_template'];
                        } ?>

 

Но мне кажется это не совсем правильно... Таким образом надо будет изменять каждый контроллер связанный с выводом блока товаров и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Создаете шаблон, например "module/myfile.tpl"

 

Создаете контроллер "module/myfile.php"

В контроллере грузите необходимые модели, делаете че вам там надо делать

и указываете шаблон

$this->template = 'default/template/module/myfile.tpl';

Открываете контроллер шаблона, куда хотите пихать свой шаблон и подключаете его, обычно этот кусок выглядит так

$this->children = array(
	'common/column_left',
	'common/column_right',
	'common/content_top',
	'common/content_bottom',
	'common/footer',
	'common/header'
);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Пример, файл module/featured.tpl выглядит так:

<div class="box">
  <div class="box-heading"><?php echo $heading_title; ?></div>

  <div class="box-content">

    <div class="box-product">

      <?php foreach ($products as $product) { ?>

      <div>

        <?php if ($product['thumb']) { ?>

        <div class="image"><a href="<?php echo $product['href']; ?>"><img src="<?php echo $product['thumb']; ?>" alt="<?php echo $product['name']; ?>" /></a></div>

        <?php } ?>

        <div class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></div>

        <?php if ($product['price']) { ?>

        <div class="price">

          <?php if (!$product['special']) { ?>

          <?php echo $product['price']; ?>

          <?php } else { ?>

          <span class="price-old"><?php echo $product['price']; ?></span><br /><span class="price-new"><?php echo $product['special']; ?></span>

          <?php } ?>

        </div>

        <?php } ?>

       <div class="rating">

          <?php for ($i = 1; $i <= 5; $i++) { ?>

          <?php if ($product['rating'] < $i) { ?>

          <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-2x"></i></span>

          <?php } else { ?>

          <span class="fa fa-stack"><i class="fa fa-star fa-stack-2x"></i><i class="fa fa-star-o fa-stack-2x"></i></span>

          <?php } ?>

          <?php } ?>

        </div>

        <div class="cart"><input type="button" value="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>');" class="button" /></div>

      </div>

      <?php } ?>

    </div>

  </div>
</div>

Я хочу вынести кусок, который отвечает за сам блок товара в отдельный файл, что бы featured.tpl остался таким:

<div class="box">
  <div class="box-heading"><?php echo $heading_title; ?></div>

  <div class="box-content">

    <div class="box-product">

      <?php foreach ($products as $product) { ?>

            !!!ТУТ НАДО ПОДКЛЮЧАТЬ ДОП.ШАБЛОН  product_block.tpl!!!

      <?php } ?>

    </div>

  </div>
</div>

и появился бы некий product_block.tpl:

<div>
        <?php if ($product['thumb']) { ?>

        <div class="image"><a href="<?php echo $product['href']; ?>"><img src="<?php echo $product['thumb']; ?>" alt="<?php echo $product['name']; ?>" /></a></div>

        <?php } ?>

        <div class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></div>

        <?php if ($product['price']) { ?>

        <div class="price">

          <?php if (!$product['special']) { ?>

          <?php echo $product['price']; ?>

          <?php } else { ?>

          <span class="price-old"><?php echo $product['price']; ?></span><br /><span class="price-new"><?php echo $product['special']; ?></span>

          <?php } ?>

        </div>

        <?php } ?>

       <div class="rating">

          <?php for ($i = 1; $i <= 5; $i++) { ?>

          <?php if ($product['rating'] < $i) { ?>

          <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-2x"></i></span>

          <?php } else { ?>

          <span class="fa fa-stack"><i class="fa fa-star fa-stack-2x"></i><i class="fa fa-star-o fa-stack-2x"></i></span>

          <?php } ?>

          <?php } ?>

        </div>

        <div class="cart"><input type="button" value="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>');" class="button" /></div>
      </div>

никаких доп. вычислений делать не нужно, все данные для вывода у меня уже есть, мне просто в featured.tpl надо подключить product_block.tpl

Можно это сделать без создания доп. контроллера?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А чем не устраивает такой вывод своего блока

<?php echo $my_block; ?>

Ну, делайте через ж... по своему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простите, не совсем понял, где должен заполняться $my_block, при том что данные все уже есть во вьюхе, и новые запросы к БД не хотелось бы делать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я вам выше описал. Возьмите какой-нибудь модуль и разберите его - поймете что и как работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

requrie_once в шаблонах / создание какой-нибудь библиотеки (или хэлпера) с методом, который будет принимать массив товаров, а отдавать сформированный html (в шаблоне вызываться будет как-то так - "echo $this->megoproducthtmllibrary->buildproductblock($products_array);").

но это привнесет запутанности в движок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А где хелпер должен лежать, и что в нём должно быть?
Где-нибудь можно почитать именно про создание хелперов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А... Вы наверно имели ввиду библиотеку: https://opencartforum.com/topic/29217-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B8-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%B2%D0%BE%D0%B5%D0%B9-%D0%B1%D0%B8/

 

А для библиотеки можно шаблон (вид) создать, или предполагается что HTML целиком будет формироваться в этой библиотеке?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

предполагается что HTML целиком будет формироваться в этой библиотеке

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.