Статьи

Разработка темы Magento: страница продукта, часть 2

В этой статье из серии «Разработка тем Magento» мы доработаем страницу продукта с того места, где мы ее оставили в предыдущей статье. Мы отредактируем файлы phtml, отвечающие за отображение раздела мультимедиа, раздела связанных продуктов и т. Д.

Теперь давайте начнем добавлять динамический тег изображений, цены, описания и т. Д. Внутри элемента product-detail, который мы начали редактировать в предыдущей статье.

Начнем с добавления динамического тега изображений. Если мы посмотрим на наш отредактированный HTML-код, код для мультимедиа простирается от строк 19 до 28. Мы заменим все это одной строкой кода:

1
<?php echo $this->getChildHtml(‘media’) ?>

Как мы видим из самого файла view.phtml, эта строка извлекает весь код для отображения изображений.

Таким образом, новый код в строке 18 будет выглядеть так:

1
2
3
<div class=»preview_image»>
  <?php echo $this->getChildHtml(‘media’) ?>
</div>

Далее мы заменим название продукта в строке 22 на этот динамический код:

1
<?php echo $_helper->productAttribute($_product, $_product->getName(), ‘name’) ?>

В строке 24 мы заменим код цены следующим образом:

1
2
3
4
5
<div class=»price pull-left»>
    <?php echo $this->getPriceHtml($_product);
    <?php echo $this->getChildHtml(‘bundle_prices’) ?>
    <?php echo $this->getTierPriceHtml() ?>
</div>

Внутри класса pull-right в строке 29 мы добавим код для отображения обзора и доступности продукта. Таким образом, новый код в строке 29 будет выглядеть так:

1
2
3
4
<div class=»pull-right»>
    <?php echo $this->getReviewsSummaryHtml($_product, ‘default’, false)?>
    <?php echo $this->getChildHtml(‘product_type_availability’);
</div>

Далее мы заменим жестко закодированное описание, написанное в строке 33, на этот динамический тег:

1
<?php echo $_helper->productAttribute($_product, nl2br($_product->getShortDescription()), ‘short_description’) ?>

Если мы посмотрим на HTML-файл, который мы редактируем, следующее, что мы увидим, это раскрывающиеся окна для выбора вариантов продукта. Мы заменим этот код внутри div для ввода размера следующим динамическим кодом:

1
2
3
4
<?php echo $this->getChildHtml(‘other’);?>
<?php if ($_product->isSaleable() && $this->hasOptions()):?>
    <?php echo $this->getChildChildHtml(‘container1’, », true, true) ?>
<?php endif;?>

Теперь этот код не будет автоматически генерировать параметры для продукта, но также будет отображать кнопку «Добавить в корзину» и параметры общего доступа. Итак, мы также можем удалить следующий код, который идет после .size-input div :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
<hr class=»border»>
<div class=»wided»>
<div class=»qty»>Qty &nbsp;&nbsp;:
  <select>
    <option>1</option>
  </select>
</div>
<div class=»button_group»>
  <button class=»button» >Add To Cart</button>
</div>
</div>
<div class=»clearfix»></div>
<hr class=»border»>
<img src=»images/share.png» alt=»» class=»pull-left»>

Теперь, если мы посмотрим на текущую страницу, все на месте и работает нормально. Нам просто нужно изменить внутренний код некоторых элементов, таких как область изображений, раздел связанных продуктов и т. Д. И, наконец, нам просто нужно освежить CSS, и наша страница будет готова.

Без дальнейших задержек, давайте приступим к редактированию кода для раздела изображений. Помните, что мы заменили все изображения HTML одной строкой кода: <?php echo $this->getChildHtml('media') ?> . Эта строка кода отображает здесь код из файла шаблона \ catalog \ product \ view \ media.phtml: Вы также можете проверить это, включив подсказки шаблона и проверив, откуда поступает код для раздела изображений.

Теперь, когда мы определили файл, отвечающий за генерацию этого кода, давайте скопируем этот файл из темы rwd по умолчанию в нашу новую тему и приступим к ее редактированию. Код для файла media.phtml выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
    $_product = $this->getProduct();
    $_helper = $this->helper(‘catalog/output’);
?>
<div class=»product-image product-image-zoom»>
    <div class=»product-image-gallery»>
        <img id=»image-main»
             class=»gallery-image visible»
             src=»<?php echo $this->helper(‘catalog/image’)->init($_product, ‘image’) ?>»
             alt=»<?php echo $this->escapeHtml($this->getImageLabel()) ?>»
             title=»<?php echo $this->escapeHtml($this->getImageLabel()); ?>» />
 
        <?php $i=0;
            <?php if ($this->isGalleryImageVisible($_image)): ?>
            <img id=»image-<?php echo $i; ?>»
                 class=»gallery-image»
                 src=»<?php echo $this->getGalleryImageUrl($_image); ?>»
                 data-zoom-image=»<?php echo $this->getGalleryImageUrl($_image); ?>» />
            <?php endif;
        <?php $i++;
    </div>
</div>
 
<?php if (count($this->getGalleryImages()) > 0): ?>
<div class=»more-views»>
    <h2><?php echo $this->__(‘More Views’) ?></h2>
    <ul class=»product-image-thumbs»>
    <?php $i=0;
        <?php if ($this->isGalleryImageVisible($_image)): ?>
        <li>
            <a class=»thumb-link» href=»#» title=»<?php echo $this->escapeHtml($_image->getLabel()) ?>» data-image-index=»<?php echo $i; ?>»>
                <img src=»<?php echo $this->helper(‘catalog/image’)->init($this->getProduct(), ‘thumbnail’, $_image->getFile())->resize(75); ?>»
                     width=»75″ height=»75″ alt=»<?php echo $this->escapeHtml($_image->getLabel()) ?>» />
            </a>
        </li>
        <?php endif;
    <?php $i++;
    </ul>
</div>
<?php endif;
 
<?php echo $this->getChildHtml(‘after’);

Прежде всего, мы скопируем этот HTML-код нашего раздела изображений в недавно скопированный файл media.phtml:

01
02
03
04
05
06
07
08
09
10
11
12
<div class=»preview_image»>
  <div class=»preview-small»><img id=»zoom_03″ src=»images/products/medium/products-01.jpg» data-zoom-image=»images/products/Large/products-01.jpg» alt=»»></div>
  <div class=»thum-image»>
    <ul id=»gallery_01″ class=»prev-thum»>
      <li><a href=»#» data-image=»images/products/medium/products-01.jpg» data-zoom-image=»images/products/Large/products-01.jpg»><img src=»images/products/thum/products-01.png» alt=»»></a></li>
      <li><a href=»#» data-image=»images/products/medium/products-02.jpg» data-zoom-image=»images/products/Large/products-02.jpg»><img src=»images/products/thum/products-02.png» alt=»»></a></li>
      <li><a href=»#» data-image=»images/products/medium/products-03.jpg» data-zoom-image=»images/products/Large/products-03.jpg»><img src=»images/products/thum/products-03.png» alt=»»></a></li>
      <li><a href=»#» data-image=»images/products/medium/products-04.jpg» data-zoom-image=»images/products/Large/products-04.jpg»><img src=»images/products/thum/products-04.png» alt=»»></a></li>
      <li><a href=»#» data-image=»images/products/medium/products-05.jpg» data-zoom-image=»images/products/Large/products-05.jpg»><img src=»images/products/thum/products-05.png» alt=»»></a></li>
    </ul>
    <a class=»control-left» id=»thum-prev» href=»javascript:void(0);»><i class=»fa fa-chevron-left»></i></a><a class=»control-right» id=»thum-next» href=»javascript:void(0);»><i class=»fa fa-chevron-right»></i></a></div>
</div>

Теперь мы начнем модифицировать этот код для вставки динамического кода в соответствующие места, сравнивая его с реальным файлом media.phtml.

Мы начнем с добавления этих строк вверху файла:

1
2
3
4
<?php
    $_product = $this->getProduct();
    $_helper = $this->helper(‘catalog/output’);
?>

Мы заменим div классом preview-small следующим кодом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<div class=»product-image-gallery»>
        <img id=»image-main»
             class=»gallery-image visible»
             src=»<?php echo $this->helper(‘catalog/image’)->init($_product, ‘image’) ?>»
             alt=»<?php echo $this->escapeHtml($this->getImageLabel()) ?>»
             title=»<?php echo $this->escapeHtml($this->getImageLabel()); ?>» />
 
        <?php $i=0;
            <?php if ($this->isGalleryImageVisible($_image)): ?>
            <img id=»image-<?php echo $i; ?>»
                 class=»gallery-image»
                 src=»<?php echo $this->getGalleryImageUrl($_image); ?>»
                 data-zoom-image=»<?php echo $this->getGalleryImageUrl($_image); ?>» />
            <?php endif;
        <?php $i++;
    </div>
<?php if (count($this->getGalleryImages()) > 0): ?>
<div class=»more-views»>
    <ul class=»product-image-thumbs»>
    <?php $i=0;
        <?php if ($this->isGalleryImageVisible($_image)): ?>
        <li>
            <a class=»thumb-link» href=»#» title=»<?php echo $this->escapeHtml($_image->getLabel()) ?>» data-image-index=»<?php echo $i; ?>»>
                <img src=»<?php echo $this->helper(‘catalog/image’)->init($this->getProduct(), ‘thumbnail’, $_image->getFile())->resize(50); ?>»
                     width=»50″ height=»50″ alt=»<?php echo $this->escapeHtml($_image->getLabel()) ?>» />
            </a>
        </li>
        <?php endif;
    <?php $i++;
    </ul>
</div>
<?php endif;

Аналогично мы заменим div на класс thum-image следующим кодом:

И в конце кода мы добавим эту строку:

1
<?php echo $this->getChildHtml(‘after’);

Таким образом, код файла в конце будет выглядеть так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
    $_product = $this->getProduct();
    $_helper = $this->helper(‘catalog/output’);
?>
<div class=»preview_image»>
  <div class=»product-image-gallery»>
        <img id=»image-main»
             class=»gallery-image visible»
             src=»<?php echo $this->helper(‘catalog/image’)->init($_product, ‘image’) ?>»
             alt=»<?php echo $this->escapeHtml($this->getImageLabel()) ?>»
             title=»<?php echo $this->escapeHtml($this->getImageLabel()); ?>» />
 
        <?php $i=0;
            <?php if ($this->isGalleryImageVisible($_image)): ?>
            <img id=»image-<?php echo $i; ?>»
                 class=»gallery-image»
                 src=»<?php echo $this->getGalleryImageUrl($_image); ?>»
                 data-zoom-image=»<?php echo $this->getGalleryImageUrl($_image); ?>» />
            <?php endif;
        <?php $i++;
    </div>
  <?php if (count($this->getGalleryImages()) > 0): ?>
<div class=»more-views»>
    <ul class=»product-image-thumbs»>
    <?php $i=0;
        <?php if ($this->isGalleryImageVisible($_image)): ?>
        <li>
            <a class=»thumb-link» href=»#» title=»<?php echo $this->escapeHtml($_image->getLabel()) ?>» data-image-index=»<?php echo $i; ?>»>
                <img src=»<?php echo $this->helper(‘catalog/image’)->init($this->getProduct(), ‘thumbnail’, $_image->getFile())->resize(50); ?>»
                     width=»50″ height=»50″ alt=»<?php echo $this->escapeHtml($_image->getLabel()) ?>» />
            </a>
        </li>
        <?php endif;
    <?php $i++;
    </ul>
</div>
<?php endif;
</div>
<?php echo $this->getChildHtml(‘after’);

Теперь мы почти закончили с частью изображений. В конце мы исправим некоторые проблемы с CSS, и это будет очень похоже на наш HTML-дизайн.

страница продукта готовится

Далее идет исправление соответствующего раздела. Включив подсказки шаблонов, мы можем видеть, что эта часть страницы идет из файла: template \ catalog \ product \ list \ related.phtml.

Раздел связанных продуктов перед редактированием

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

Мы создадим новый файл и скопируем HTML-код соответствующего раздела продукта из нашей HTML-темы. Здесь мы будем хранить только один экземпляр продукта, так как мы будем циклически просматривать его в нашем файле phtml. Код, который мы скопируем, будет таким:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
<div id=»productsDetails» class=»hot-products»>
    <h3 class=»title»><strong>Hot</strong> Products</h3>
    <div class=»control»><a id=»prev_hot» class=»prev» href=»#»>&lt;</a><a id=»next_hot» class=»next» href=»#»>&gt;</a></div>
    <ul id=»hot»>
      <li>
        <div class=»row»>
          <div class=»col-md-3 col-sm-4″>
            <div class=»products»>
          <div class=»main»>
            <div class=»view view-eighth»>
                <img src=»images/products/small/products-02.jpg» />
                <div class=»mask»>
                    <a href=»#» class=»info»>Read More</a>
                </div>
                <div class=»productname»>Iphone 5s Gold 32 Gb 2013</div>
                <h4 class=»price»>$451.00</h4>
            </div>
            </div>
        </div>
      </li>
    </ul>
</div>

Теперь мы начнем делать его динамическим, помещая в него динамические теги, сравнивая его с реальным файлом related.phtml.

Мы поместим весь код в этот тег if:

1
<?php if($this->getItems()->getSize()): ?>

Далее мы разместим этот цикл for сразу после строки div:

1
<?php foreach($this->getItems() as $_item): ?>

Затем мы начнем размещать динамический тег названия продукта, цены, описания, URL и т. Д. В разделе продукта, как мы делали при редактировании продуктов на главной странице.

Весь код этого файла после редактирования будет выглядеть так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php if($this->getItems()->getSize()): ?>
    <div id=»productsDetails» class=»hot-products»>
        <h3 class=»title»><strong>Related</strong> Products</h3>
        <div class=»control»><a id=»prev_hot» class=»prev» href=»#»>&lt;</a><a id=»next_hot» class=»next» href=»#»>&gt;</a></div>
        <ul id=»hot»>
          <li>
            <div class=»row»>
            <?php foreach($this->getItems() as $_item): ?>
                <div class=»col-md-3 col-sm-4″>
                    <div class=»products»>
                        <div class=»main»>
                            <div class=»view view-eighth»>
                                <img src=»<?php echo $this->helper(‘catalog/image’)->init($_item, ‘thumbnail’)->resize(214,323) ?>» width=»214″ height=»323″ alt=»<?php echo $this->escapeHtml($_item->getName()) ?>» />
                                <div class=»mask»>
                                    <a href=»<?php echo $_item->getProductUrl() ?>» class=»info»>View Product</a>
                                </div>
                                <div class=»productname»><?php echo $this->escapeHtml($_item->getName()) ?></div>
                                <h4 class=»price»>
                                    <?php echo $this->getPriceHtml($_item, true, ‘-related’) ?>
                                </h4>
                            </div>
                        </div>
                    </div>
                </div>
            <?php endforeach ?>
            </div>
          </li>
        </ul>
    </div>
<?php endif ?>

Теперь мы почти закончили редактирование phtml-файла для страницы продукта. Нам просто нужно исправить некоторые проблемы с CSS, и наша страница будет готова. На данный момент страница выглядит так:

product page before CSS

Мы сделали с большей частью этого. Теперь нам просто нужно отредактировать CSS, чтобы внести последние изменения на этой странице, что мы и сделаем в следующей статье, которая также будет последней статьей серии. Наряду с изменениями CSS для этой страницы, я объясню, как вы можете самостоятельно вносить изменения в другие страницы темы, используя приемы, которые вы изучили в этой серии.