Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

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

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

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

category.tpl

featured.tpl

latest.tpl

и т.д.

 

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

 

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

Надіслати
Поділитися на інших сайтах


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

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

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

Надіслати
Поділитися на інших сайтах


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 целиком будет формироваться в этой библиотеке?

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.