Доработка шаблона товаров minishop2 (Fenom)

Получившаяся карточка оффера MODX Revo
Урок о том как полностью переделать внешний вид карточки товара (в рамках урока делаю оффера - типа карточки каталога), все на Fenom и файловых элементах PdoTools.

Если сейчас зайти на страницу товара (в моем случае оффера), то увидит примерно такую картину:

Стандартный вид товара

Как то не очень выглядит) Давайте сделаем примерно такой внешний вид:

пример внешнего вида оффера

Для этого нам нужно немного переделать шаблон ShopProduct.tpl и чанк msProductContent.tpl, созданные в уроке «Быстрый старт с Minishop2 на Fenom». Начнем с чанка, открываем его и перекраиваем его код, в конечном итоге у меня получился следующий вызов содержимого.

<h1 class="h2 mb-2">{$_modx->resource.pagetitle}</h1>
<div id="msProduct" class="row">
    <div class="col-lg-8 col-md-8 col-7 border-top">
        <ul class="nav">
            {'msProductOptions' | snippet : [ 'tpl' => '@FILE chunks/shop/msProductOptions.tpl' ]}
            <li class="col-md-6 nav-item my-md-3">Заявок в этом месяце - <strong>1000+</strong></li>
        </ul>
        <div class="border-bottom mb-3"></div>
        <p>Способы получения денег: 
            {'!pdoResources' | snippet : [
                'parents' => '1',
                'limit' => '7',
                'resources' => '@FILE snippets/shop/GetIdCatefories.php' | snippet,
                'tpl' => '@FILE chunks/shop/poluscenieDeneg.tpl',
                'tplLast' => '@FILE chunks/shop/poluscenieDenegLast.tpl',
                'includeTVs' => 'pagetitlealternative',
                'tvPrefix' => '',
                'sortdir' => 'ASC'
            ]}
        </p>
    </div>
    <div class="col-lg-3 offset-lg-1 col-md-4 col-5">
        <img class="mt-1 img-fluid" src="{'!msGallery' | snippet : [ 'tpl' => '@FILE chunks/shop/Gallery.tpl' ]}" alt="{$_modx->resource.pagetitle}">
        <a href="{$_modx->resourcepartnerlink}" class="mt-3 btn btn-success w-100">Оформить займ</a>
    </div>
</div>

Где чанки имеют следующий коды.

msProductOptions.tpl:

{foreach $options as $option}
<li class="col-md-6 nav-item my-md-3">
    {$option.caption} - <strong>{if $option.value is array} {$option.value | join : ', '} {$option.measure_unit}
        {else} {$option.value} {/if}</strong>
</li>
{/foreach}

Это мы проходили в уроке …

Gallery.tpl:

{if $files?}
{$files[0]['url']}
{else}
/template/img/nologo.png
{/if}

Просто выводим путь до первой картинки загруженной в галерею, если не чего не загружено, то выводим путь до картинки заглушки (ее нужно создать самостоятельно).

poluscenieDeneg.tpl:

<a class="link-dark fw-bold" href="{$uri}" target="_blank" title="{$pagetitle}">{$pagetitlealternative}</a>,

Тут я создал TV поле «pagetitlealternative» — альтернативный заголовок и назначил его для шаблона категории, соответственно заполнил данное поле в самих категориях, все остальное стандарт.

poluscenieDenegLast.tpl тоже самое, что и poluscenieDeneg.tpl (для последнего результата), только в конце кода вместо , стоит ..

И самое интересное, в вызове pdoResources в параметре resources вызывается сниппет GetIdCatefories.php со следующим кодом:

<?php
$modx->getService('miniShop2');
$docid = $modx->getOption('docid', $scriptProperties, $modx->resource->get('id'));
$sql = "SELECT * FROM {$modx->getTableName('msCategoryMember')} WHERE `product_id` = $docid";
$q = $modx->prepare($sql);
$q->execute();
$resources = $q->fetchAll(PDO::FETCH_ASSOC);
foreach ($resources as $resource){
    $cats[] = $resource['category_id'];
}
$out = implode(',', $cats);
return $out;

Данный сниппет выводит все id родителей товара (через запятую). Т.е. товары же мы можем добавлять сразу в несколько категорий,

Товар добавленный в несколько категорий

этот снипет как раз выводит их в таком формате: 17,18,20,21.

Ну и тут остается еще 1 обычное TV поле: resourcepartnerlink — партнерская ссылка.

Теперь переходим к правке шаблона ShopProduct.tpl, у меня получился таким:

{extends 'file:templates/base.tpl'} 
{block 'content'}
<header class="bg-light pt-2 border-bottom">
    <div class="container">
        {'!pdoCrumbs' | snippet : [
            'showHome' => 1,
            'showAtHome' => 0,
            'tpl' => '@INLINE <li class="breadcrumb-item"><a title="{$menutitle}" href="{$link}">{$menutitle}</a></li>',
            'tplHome' => '@INLINE <li class="breadcrumb-item"><a rel="nofollow" title="{$menutitle}" href="{$link}">{$menutitle}</a></li>',
            'tplWrapper' => '@INLINE <nav aria-label="breadcrumb"><ol class="breadcrumb">{$output}</ol></nav>',
            'tplCurrent' => '@INLINE <li class="breadcrumb-item active" aria-current="page">{$menutitle}</li>'
        ]}
    </div>
</header> 
<section class="bg-white py-4">
    <div class="container">
        {include 'file:chunks/shop/msProductContent.tpl'} 
    </div>
</section>
<section class="bg-light py-4">
    <div class="container">
        <div class="row">
            <div class="col-lg-9 col-md-8">
                {if $_modx->resource.introtext?}
                <div class="card mb-3">
                    <div class="card-body">
                        <h2 class="h3">О компании</h2>
                        {$_modx->resource.introtext}
                    </div>
                </div>
                {/if}
               <div class="card mb-3">
                    <div class="card-body">
                        <div class="row">
                            <div class="col-sm-6">
                                <p classs="text-center text-sm-start"><a href="{$_modx->resourcepartnerlink}" class="btn btn-success">Оформить займ</a></p>
                            </div>
                            <div class="col-sm-6">
                                <p classs="text-center text-sm-end">Оформили: <strong>1000+</strong> раз</p>
                            </div>
                        </div>
                    </div>
                </div>
                {if $_modx->resource.content?}
                <div class="card">
                    <div class="card-body">
                        {$_modx->resource.content}
                    </div>
                </div>
                {/if}
            </div>
            <div class="col-lg-3 col-md-4">
                <div class="sticky-top" itemscope itemtype="https://schema.org/WPAdBlock">
                	<a href="#" itemprop="url" rel="external" target="_blank"><img itemprop="image" class="w-100" src="https://mykrozaym.ru/template/img/blog/money.gif" alt="баннер"></a>
                </div>
            </div>
        </div>
        <a href="{$_modx->resource.parent | resource : 'uri'}">< {$_modx->resource.parent | resource: "pagetitle"}</a>
    </div>
</section>
{/block}

Здесь все стандартно: вызов сниппетов, чанков, TV полей и условия if. Если что то не понятно, спрашивайте!

В итоге получаем вот такую карточку оффера.

Получившаяся карточка оффера

В следующем уроке переделаем внешний вид категории товаров.

Поделиться с друзьями
Алексей

Веб-дизайнер и SEO оптимизатор. Занимаюсь созданием сайтов с 2010 года и их продвижение с 2012 года!

Оцените автора
( Пока оценок нет )
Web-Revenue.ru
Добавить комментарий