Данный матерьял взят из http://www.molodezky.pp.ua, многое из етого я делал другими методами многое также. Добавил полезные моменты как шпаргалку.
Иногда нужно показать ту или иную информацию, только для определенной группы пользователей. Например, вставить приглашение зарегистрироваться для посетителей и не показывать его, если клиент уже зашел под своим логином ,т.е. перешел в группу покупателей, либо скрывать какие-то боксы и т.п.
Делаем это следующим образом, нужную нам информацию в файлах шаблона заворачиваем в следующее условие:
{if $smarty.session.customers_status.customers_status_id == 1}
Ваш текст или метка
{/if}
Нужная нам группа обозначена status_id == 1, где 1 — ID группы. В данном случае это группа «Посетитель».
Казалось бы особых проблем при добавлении ссылки в главное меню магазина возникнуть не должно, но есть один нюанс. давайте посмотрим на код:
<div id="menu">
<ul>
<li{$1}><a href="{$mainpage}"><span>{#text_mainpage#}</span></a></li>
{if $account}{if $smarty.session.customer_id}
<li{$2}><a href="{$account}"><span>{#link_account#}</span></a></li>
{/if}{/if}
<li{$3}><a href="{$cart}"><span>{#link_cart#}</span></a></li>
<li{$4}><a href="{$checkout}"><span>{#link_checkout#}</span></a></li>
{if $smarty.session.customer_id}
<li{$5}><a href="{$logoff}"><span>{#link_logoff#}</span></a></li>
{else}
<li{$6}><a href="{$login}"><span>{#link_login#}</span></a></li>
{/if}
</ul>
</div>
Каждая строка списка имеет свою переменную — li{$1}, li{$2} и так далее. Эти переменные служат для того, чтобы определять текущую страницу и применять к ней стиль current. Другими словами, выделять кнопку со ссылкой на страницу, если мы на ней же и находимся.
Эти переменные записаны в файле includes/header.php в самом конце файла, начиная с:
// Метки для закладок
if (strstr($PHP_SELF, FILENAME_DEFAULT)) {
$vamTemplate->assign('1',' class="current"');
}
....................
Для того, чтобы выделение работало и для добавленных ссылок, создадим переменные также и для этих страниц. Делается это по аналогии с теми, которые уже имеются. Например, для страницы с отзывами нужно добавить:
if (strstr($PHP_SELF, FILENAME_REVIEWS)) {
$vamTemplate->assign('9',' class="current"');
}
FILENAME_REVIEWS — в данном случае, метка нужной нам страницы, посмотреть которые можно в файле includes/filenames.php. Цифра 9 в конструкции assign ('9',' class="current"') — новая переменная {$9} в шаблоне.
И еще один пример, для более сложной страницы, например, для страницы «Контакт».
if (strstr($PHP_SELF, FILENAME_CONTENT) && $_GET['coID'] == 7) {
$vamTemplate->assign('10',' class="current"');
}
Как видите, мы добавили && $_GET['coID'] == 7, где 7 — соответствующий айди информационной страницы.
Ну, а в меню шаблона, добавляем:
<li{$9}><a href="reviews.php"><span>{#link_reviews#}</span></a></li>
<li{$10}><a href="shop_content.php?coID=7" class="last">
<span>{#link_contact_us#}</span></a></li>
И не забудьте добавить link_reviews и link_contact_us в языковые файлы. Хотя если, язык у Вас только один, то можно просто написать текстом, не используя языковые метки.
Часто нужно вывести название и контактные данные магазина на страницах шаблона. Название магазина выводится меткой {$store_name}. Для остальных же данных меток нет.
Но их можно легко вывести, вставляя в нужные места следующие константы:
В VAM shop боксе «Контент» кроме ссылок на соответствующие статьи выводятся телефон, icq и Skype, если Вы их указали в админке Настройки — Мой магазин. Немного улучшим функциональность, разместив индикаторы статуса.
Меняем код в боксе templates/ваш шаблон/boxes/box_content.html
{if $smarty.const.STORE_ICQ}
<p>
{#text_icq#} {$smarty.const.STORE_ICQ}
</p>
{/if}
{if $smarty.const.STORE_SKYPE}
<p>
{#text_skype#} {$smarty.const.STORE_SKYPE}
</p>
{/if}
на следующий:
{if $smarty.const.STORE_ICQ}
<p>
<img src="http://status.icq.com/online.gif?icq={$smarty.const.STORE_ICQ}&img=5">
{$smarty.const.STORE_ICQ}
</p>
{/if}
{if $smarty.const.STORE_SKYPE}
<script type="text/javascript" src="http://download.skype.com/share/
kypebuttons/js/skypeCheck.js"></script>
<p><a href="skype:{$smarty.const.STORE_SKYPE}?call">
<img src="http://mystatus.skype.com/smallicon/
{$smarty.const.STORE_SKYPE}" style="border: none;" width="16"
height="16" alt="Мой статус" /></a>
{$smarty.const.STORE_SKYPE}</p>{/if}
Теперь слева от номерков будут отображаться иконки статуса.
Мне приходится часто натягивать «монстровские» шаблоны. А в них бокс
корзины выглядит вот так: «now in your cart 5 items». По умолчанию в
VAM Shop'е совсем другой текст — перечисление товара с общей суммой.
Бокс меняется довольно просто.
Меняем код бокса templates/ваш шаблон/boxes/box_cart.html на такой:
1 |
{config_load file="$language/lang_$language.conf" section="boxes"} |
Если нужно вывести не только сумму товаров, но и количество, то добавляем
1 |
на сумму {$TOTAL} |
Как видите, это не сложно.
Иногда нужно вывести определный код в зависимости от того, какой язык в данный момент активен. Например, показ банеров в зависимости от языка.
Делаем это, используя следующее условие в соответствующем файле шаблона:
{if $smarty.session.language == 'russian'}
нужный код для русского языка
{/if}
Для остальных языков делаем аналогично.
Для того, чтобы вывод главной страницы на VAMshop отличался, я использую отдельный шаблон templates/ваш шаблон/index.php_.html (подробнее тут).
Этот метод отлично работает, но есть одно но — им же описывается и
результат выбора производителя index.php?manufacturers_id=хх.
Поэтому тут я использовал другой способ. В общем шаблоне templates/ваш шаблон/index.php я ввел условие:
{if in_array($smarty.server.REQUEST_URI, array('/', '/index.php'))}
код для главной
{else}
код для внутренней
{/if}
Таким образом, я получил отдельный шаблон для главной и внутренней в едином файле.
Возможно, даже я возьму этот метод в качестве основного при создании отдельного шаблона главной страницы.
По умолчанию имена файлов картинок при загрузке меняются на вида «ID_товара_№картинки». В общем-то это довольно удобно, но если по тем, или иным причинам Вы хотите оставить имя файла без изменений, то открываем файл admin/includes/classes/categories.php, находим строчку:
$products_image_name = strtolower($products_id.'_0.'.$nsuffix);
и меняем на:
$products_image_name = strtolower($products_image->filename);
матерьял из http://www.molodezky.pp.ua