Центр документации
Карта сайта

Создай визитку сам!


Самоучитель по интеграции дизайна и настройке Amiro.CMS на примере демонстрационной версии пакета Визитка »


Вопрос-ответ

Вопросы по настройке обмена данными

Общие вопросы

Работа с интернет магазином

Настройка интернет-магазина

Настройка каталога товаров

Ограничение доступа



Вы не нашли ответа на свой вопрос? Вы можете задать его на этой форме.

Тема:
Имя*:
Адрес E-mail*:
Вопрос*:
* Обязательные поля
 

Вопросы по настройке обмена данными

Не получается объединить файл конфигурации с нашей конфигурацией, выдаётся ошибка: "Структура конфигурации несовместима с текущей версии программы".

Проблема связана с выходом очередного обновления 1С.

Для решения проблемы необходимо:
  1. В конфигураторе открыть файл "1Cv8_Amiro- ИнтернетМагазин.cf". 1С должна предложить автоматически его скорректировать.
  2. Сохранить конфигурацию на диске и повторить процесс ее установки в соответствии с прилагаемой документацией.

Общие вопросы

Как можно редактировать тэг HTML?
Для изменения этого тэга необходимо в файл /_local/front_functions.php добавить следующий код:
function CustomApplyVars(&$vObject, $cThread, &$aVars, $pageId = 0){
  if($cThread == 'page_finalize'){
            $aVars = preg_replace('/<html>/','<html xmlns="http://www.w3.org/1999/xhtml">', $aVars, 1);
            }
  return true;
  }
где <html xmlns="http://www.w3.org/1999/xhtml"> - то, на что заменять этот тэг.

Если такая функция в файле уже существует, её необходимо либо закомментировать, либо совместить её код, вставив в начало:
if($cThread == 'page_finalize'){
            $aVars = preg_replace('/<html>/','<html xmlns="http://www.w3.org/1999/xhtml">', $aVars, 1);
            }

Как включить новые уведомления на сайте?

Для того, что бы включить новые уведомления на сайте, необходимо выполнить следующие действия:

  • Через FTP, при помощи любого текстового редактора необходимо открыть на редактирование файл _js/common.js и добавить в него следующий код:
    var oAlertWindow;
    var oAlertWindowTimer;

    function showInitAlert(){
    oAlertWindow = document.getElementById('status_message');
    if (oAlertWindow){
    var oLocalMessage = document.getElementById('status_message_local');
    if(oLocalMessage && (oAlertWindow.className == 'status_error')){
    oLocalMessage.style.display = 'none';
    }
    alert(oAlertWindow.innerHTML);
    }
    }

    function alert(message){
    if(!message || (message == '')){
    return false;
    }
    oAlertWindow = document.getElementById('status_message');
    if (!oAlertWindow){
    oAlertWindow = AMI.Browser.DOM.create('DIV', 'status_message', 'status_notice', '', document.body);
    }
    if((oAlertWindow.innerHTML != '') && (oAlertWindow.style.visibility == 'visible')){
    if(oAlertWindow.innerHTML != message){
    oAlertWindow.innerHTML += '<br>' + message;
    }
    }else{
    oAlertWindow.innerHTML = message;

    if(!oAlertWindow.onmouseover) oAlertWindow.onmouseover = function(){
    window.clearTimeout(oAlertWindowTimer);
    }
    if(!oAlertWindow.onmouseout) oAlertWindow.onmouseout = function(){
    window.setTimeout(function(oObj){return function(){fadeOut(oObj, 1000)}}(oAlertWindow), 1000);
    }
    if (navigator.userAgent.indexOf("MSIE") >= 0) {
    }
    else {
    oAlertWindow.style.left = parseInt((AMI.Browser.getWindowWidth() - oAlertWindow.offsetWidth) / 2);
    }
    fadeIn(oAlertWindow, 300);
    }
    window.clearTimeout(oAlertWindowTimer);
    oAlertWindowTimer = window.setTimeout(function(oObj){return function(){fadeOut(oObj, 1000)}}(oAlertWindow), 4000);
    }

    function fadeOut(oObj, time){
    var delay = 50;
    if(time==null){
    var time = 500;
    }
    alert( parseFloat(oObj.style.opacity) + ' - ' + parseFloat(oObj.style.opacity) +' / ' + (time / delay) + ' = ' + parseFloat(oObj.style.opacity) - (parseFloat(oObj.style.opacity) / (time / delay)));
    if(time > 0){
    time -= delay;
    oObj.style.opacity = parseFloat(oObj.style.opacity) - ( parseFloat(oObj.style.opacity) / (time / delay) );
    window.setTimeout(function(_oObj, _time ){return function(){fadeOut(_oObj, _time)}}(oObj, time), delay);
    }else{
    oObj.style.opacity = '1';
    oObj.style.visibility = 'hidden';
    }
    }

    function fadeIn(oObj, time){
    var delay = 50;
    if(oObj.style.visibility != 'visible'){
    oObj.style.visibility = 'visible';
    oObj.style.opacity = '0';
    }
    if(time==null){
    var time = 500;
    }
    if(time > 0){
    time -= delay;
    oObj.style.opacity = parseFloat(oObj.style.opacity) + (1 - parseFloat(oObj.style.opacity)) / (time / delay);
    window.setTimeout(function(_oObj, _time){return function(){fadeIn(_oObj, _time)}}(oObj, time), delay);
    }
    }

    addOnLoadEvent(showInitAlert);
    savePreviousOnLoadEvent();
  • Далее, в глобальных стилях(CSS) необходимо код:
    .status_error {color:#660000; font-size:10;}
    .status_notice {color:#000066; font-size:10;}
    .status_normal {color:#000000; font-size:10;}
    заменить на:
    .AlertWindow, #status_message {
    position:fixed;
    padding:20px;
    font-size:14px;
    visibility:hidden;
    border:2px #fff solid;
    -moz-border-radius: 10px;
    -webkit-border-radius: 10px;
    border-radius: 10px;
    -moz-box-shadow: 0px 0px 10px 3px #ccc;
    -webkit-box-shadow: 0px 0px 10px 3px #ccc;
    box-shadow: 0px 0px 10px 3px #ccc;
    z-index:10000;
    top: 50%;
    //text-align: center;
    //border:2px #E8E8E8 solid;
    //position: absolute;
    //top: expression(document.getElementsByTagName( 'body' )[0].scrollTop) + (AMI.Browser.getWindowHeight() / 2);
    //width: 450px;
    //left: 50%;
    //margin-left: -250px;
    }

    .status_error {background:#ffb0b0;}
    .status_normal {background:#b0efff;}
    .status_notice {background:#ffef8f;}

    .local_status_error {color:#800000;}
    .local_status_notice {color:#008000;}
    .local_status_normal {color:#008000;}
  • Далее, в шаблоне messages.tpl всё содержимое шаблона необходимо заменить на:
    <!--#set var="red"     value="<div id="status_message" class="status_error">[MSG]</div>"-->
    <!--#set var="black" value="<div id="status_message" class="status_normal">[MSG]</div>"-->
    <!--#set var="none" value="<div id="status_message" class="status_notice">[MSG]</div>"-->
    <!--#set var="splitter" value="<br>"-->
    [BODY]

Как поставить якорь на странице.

Нужно открыть страницу в режиме html (кнопка "p<html>" визуального редактора), задать якорь, например, в начале страницы:

<a name="top"></a>
Далее внизу страницы поставить ссылку:
<a href="about.html#top">Наверх</a>
Где about.html – ссылка на текущую страницу. Также ссылку текущей страницы можно узнать с помощью переменной ##script_link##. Так, к примеру, следующую конструкцию можно вставить на любой странице сайта и она всегда будет вести на якорь только на этой странице:
<a href="##script_link###top">Наверх</a>

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

Письмо редактируется в шаблоне templates/letters/feedback_mail.tpl. Закоментируйте ненужные поля или поставьте проверку на заполненность. Пример проверки ниже:

##if(birthdate != '')##%%bdate%% : ##birthdate####endif##

Можно ли в разделе пользователя (личный кабинет) помимо персональных данных размещать файлы (например: таблица.xls) или просто тексты. Для каждого пользователя свои.

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

   Так же можно изменить вывод этого поля в шаблоне (к примеру, сделав его ссылкой, которая вела бы на какой-либо файл). Сделать это необходимо в шаблоне member.tpl (_local/_admin/templates/), в сете var="common_cf", задав для переменной необходимый код (к примеру: <a href="##value##">Ваш файл</a>)



Как изменить стандартные JS-функции? Изменить стандартный JS возможно следующим образом:
  1. На любой странице сайта нужно открыть исходный(HTML-код) страницы.
  2. Из строки
    <script type="text/javascript" src="http://www.site.ru/system_js.php?script=system&_cv=5.8.4.0"></script> 
    открыть файл system_js.php (в браузере firefox этот файл отображается ссылкой и можно просто на него кликнуть - откроется его содержимое)
  3. Затем, в этом файле скопировать первую функцию (К примеру, function show_picture) полностью, с её содержимым в файл _js/common.js (доступ к этому файлу есть через FTP).
  4. Теперь, функция в этом файле является приоритетной, по сравнению с начальной, и все изменения сделанные в ней будут действовать на сайте.

Как для пункта меню, заданного картинкой, вывести название?
Главное меню с картинкой и названием: В шаблоне menu.tpl, в сетах var="img_main_item" и var="img_main_item_active" нужно добавить переменную ##name## в месте, где нужно вывести название.
Почему не выводятся анонсы в спец. Блоке "Разделы базы знаний"?

Спец. блок "Разделы базы знаний" выводит только список категорий/подкатегорий базы знаний и не выводит их анонсы (этот спец. блок является аналогом к спец. блоку "Разделы каталога товаров").

Для того, что бы этот спец. выводил анонсы категорий, необходимо в  шаблоне kb_tree_links.tpl  добавить переменную ##announce## в одном из сетов.


Возможно ли в форме обратной связи использовать checkbox и передавать значения соответствующего поля?

Для этого можно использовать любое из существующих полей.

Отредактировать вывод каждого поля можно в шаблоне feedback.tpl, в сетах вида var="field_...", где ... - имя поля.
При этом параметры "name" должны быть одинаковыми, т.к. данные поля являются идентификаторами поля.

Для того, чтобы изменить название поля или добавить/убрать значения, если используются checkbox/input и т.п., необходимо использовать языковые переменные и языковые шаблоны: В языковом шаблоне (Менеджер сайта - Шаблоны модулей - Локализации) feedback.lng переименуйте существующие или задайте новые в соответствии с уже имеющимися.
При введении новых переменных, в шаблоне feedback.tpl используйте эти переменные (яз. переменные выглядят след. образом: %%var%%).


Как сделать так, чтобы Главное меню раскрывалось при клике на странице?

Нужно сделать следующее:

  1. В Глобальных стилях common.css для .submenu задать стиль
    {display: block;width:auto; }
  2. В _js/menu.js нужно закомментировать строки:
    menuObj.style.position = 'absolute';
    menuObj.style.left = parentPosition[0] + deltaX + 'px';
    menuObj.style.top = parentPosition[1] + deltaY + 'px';
  3. В шаблоне menu.tpl заменить сеты главного меню на следующие:
    <!--#set var="main_block" value="<table cellspacing=0 cellpadding=0 border=0
    class="main_menu">##content##</table>"-->
    <!--#set var="main_item" value="##splitter##
    <tr>
    <td valign=middle>##noindex_start####if(have_submenu == "1" )##
    <a ##relnofollow## class="have_sub" name="v##id##"
    id="j##id##" href="##link##">##name##</a>
    ##else##
    <a ##relnofollow## href="##link##">##name##</a>
    ##endif####noindex_end##
    ##--submenu--##</td>
    </tr>
    "-->
    <!--#set var="main_item_active" value="##splitter##
    <tr>
    <td valign=middle>##noindex_start####if(have_submenu == "1" )##
    <a ##relnofollow## class="item_active have_sub" name="v##id##"
    id="j##id##" href="##link##">##name##</a>
    ##else##
    <a ##relnofollow## class=item_active href="##link##">
    ##name##</a>
    ##endif####noindex_end##
    ##submenu##</td>
    </tr>
    "-->
    <!--#set var="main_splitter" value="<tr>
    <td class="splitter">&nbsp;</td></tr>"-->


Как можно выделить один пункт меню другим стилем?

Рассмотрим на примере Главного меню. Нужно:

  1. Включить  режим отладки (Настройки системы, Раздел:Система, Модуль:Общие настройки)
  2. Сделать распечатку переменных (функция ##__PRINT_VARS__##) в шаблоне menu.tpl в сете var="main_item"
  3. Посмотреть id нужного пункта меню, например [menu : main_item]: id = 20134
  4. Далее в сете var="main_item" необходимо сделать проверку, пример ниже:
    <!--#set var="main_item" value="
    ##if (id != '20134')##
    <a ##relnofollow## href="##link##"><nobr>++##name##++</nobr></a>##else##
    <a ##relnofollow## href="##link##"><nobr>**##name##**</nobr></a> ##endif##"-->

Как сделать так, чтобы в Фотоальбоме (Портфолио, ….) на странице списка фотографий при нажатии на фотографию появлялось бы всплывающее изображение, а не осуществлялся бы переход в детальное описание?

Рассмотрим на примере Фотоальбома.

Для этого нужно в шаблоне photoalbum.tpl в сете var="item_row;subitem_row" закоментировать участок кода:

<a href="##script_link####nav_data##offset=##offset##&catoffset=
##catoffset##">
##small_picture##</a>

и вместо него вставить следующий код:

<img data-ami-mbpopup="##popup_picture_src##" data-ami-mbgrp="##cat_name_global##" data-ami-mbdescr="##_announce##" data-ami-mbhdr="##_header##" title="##picture_title##" src="##small_picture_src##" border="0">

Так же, необходимо в сет var="item_cat_name;itemD_cat_name;urgent_item_cat_name;browse_item_cat_name" добавить задание новой, глобальной переменной: ##setglobalvar @cat_name_global = cat_name##.

Следует учитывать, что под самим изображением будет выводиться не описание, а анонс и, при этом, в нём не будет HTML-форматирования.

В тексте анонса при этом нельзя использовать двойные кавычки, т.к. они используются для экранирования строки анонса в значении атрибута data-ami-mbdescr


Как добавить свои смайлы в форму комментирования?
  1. Нужно на ftp в папку _local в файл config_editor.php добавить по образцу строку с кодом.
     base_smile2 = "smile2"
  2. Далее в папку _mod_files/smiles/base/ добавить картинку smile2.gif

Как включить многоязычность на сайте?

Модуль многоязычность доступен для пакетов Корпоративный, Витрина, Бизнес.

Нужно в «Настройках, Раздел:Система, Модуль:Ядро» включить параметр «Многоязычная поддержка». После этого в Менеджере сайта в правом верхнем углу появится выпадающий список с выбором языка.

Установить/добавить локализации можно в «Сервис->Настройка системы->Локализации». Далее в нужном вам блоке макета добавьте спец. блок выбора языка ##spec_lang_select_001001104## Внешний вид выбора языка настраивается в шаблоне common.tpl


Как вставить форму авторизации на любой странице сайта?

Для того, чтобы вставить форму авторизации в любом месте сайта, нужно:

  1. В менеджере сайта создать страницу с типом: "Сервис::Пользователи", и перейти на неё на сайте.
  2. Открыть исходный код это страницы и найти там участок, заключённый в тэги <form></form> (после комментария: <!--{title=Пользователи}-->)  (по его содержанию можно увидеть нужные поля, которые выводят форму логина/пароля, см. рис. "Форма авторизации в любом месте сайта").
    Рисунок "Форма авторизации в любом месте сайта".

    Рисунок "Форма авторизации в любом месте сайта"

  3. Скопируйте этот код, и вставьте его в нужном месте вашего сайта.
  4. Если нужна проверка на заполненность полей, то нужен JavaScript, который находится выше этих тэгов в исходном коде.

Можно ли сделать проверку на заполненность текста статьи?

Да, для этого нужно задать проверку в шаблоне articles.tpl.


  1. Для списка статей:
    • В сете var="item_row;subitem_row" (так же, сет может иметь вид var="item_row") в нужном месте(или на месте всего содержимого сета) задаётся проверка вида:
      ##if(_body == "")##
      здесь нужное содержимое, если текста в статье нету
      ##else##
      здесь содержимое шаблона
      ##endif##
    • Если при этом нужно скрывать статью(не убирая, при этом её публикацию), то нужно задать ещё одну проверку: В сете var="item_Vsplitter;subitem_Vsplitter;urgent_item_Vsplitter":
      ##if(_body == "")##
      здесь нужное содержимое, если текста в статье нету
      ##else##
      здесь содержимое сета
      ##endif##
      Данная проверка действует во всех случаях, когда есть возможность скрыть тот разделитель, который находится выше, и если в первой проверке не выводится никакое содержимое в первой части проверки(до ##else##)
  2. Для страницы статьи(детальное отображение статьи): В сете var="item_details", в нужном месте(или на месте всего содержимого сета) задаётся проверка вида:
    ##if(body == "")##
    здесь нужное содержимое, если текста в статье нету
    ##else##
    здесь содержимое сета
    ##endif##
  3. Также можно использовать опцию "Заполнять пустое описание анонсом на странице детальной информации" в настройках статей (Раздел:Модули управления - Модуль:Статьи).

Как разместить форму обратной связи в любом месте сайта (к примеру, в описании товара, в шаблоне товара и т.п.)

Для того, что бы вставить форму обратной связи в любом месте сайта, нужно:

  1. В менеджере сайта создать страницу с типом: "Обратная связь", и перейти на неё на сайте.
  2. Открыть исходный код этой страницы и найти там участок, заключённый в тэги
    (после комментария: <!--{title=Обратная Связь}-->). По его содержанию можно увидеть нужные поля, которые выводят форму обратной связи.
  3. Скопировать этот код, и вставить его в нужном месте вашего сайта.
  4. Если нужна проверка на заполненность полей, то нужен JS, который находится выше этих тэгов в исходном коде.

Как добавить список тэгов для фотографий фотоальбома?

Для добавление тэгов необходимо:

  1. Включить расширение "Тэги" в настройках фотоальбома (Раздел:Модули Управления - Модули:Фотоальбомы).
  2. В шаблоне photoalbum.tpl , в сете var="item_details" в нужном вам месте добавьте ##tags_extension##. Пример:
    <!--#set var="item_details" value="
    <div class="item_details">
    <div class="picture_wrapper">##picture##</div>
    <table> ##tags_extension## </table>
    ##header##

*Обязательно заключите переменную ##tags_extension## в тэги <table> для корректного отображения.


Как изменить порядок полей в форме обратной связи?

Список всех полей выводится переменной ##form_fields##.

Для того, что бы в форме обратной связи задать полям любой порядок, нужно в шаблоне feedback.tpl, в сете var="form", закомментировать переменную ##form_fields##  и между переменной ##common_cf_list## и проверкой ##if(EXTENSION_TWIST_PREVENTION_FEEDBACK)## вставить список переменных:

##firstname## -имя
##lastname## - фамилия
##birthdate## - день рождения
##email## - e-mail
##phone## - телефон
##title## - Должность
##address1## - Адрес 1
##address2## - Адрес 2
##web## - Вебсайт
##city## - Город
##country## - Страна
##info## - "Пожалуйста укажите какого рода информация вас интересует"
##company## - компания
##required_field_legend## - "обязательные поля"
(текстовое обозначение(сноска))

Поля можно задавать по одному, таким образом, меняя не только порядок, но и положение полей на форме.


Как добавить кнопку поиска для спец. блока быстрого поиска?

Осуществить поиск можно без кнопки "Найти", нажав клавишу "Enter".


Чтобы поставить кнопку "Найти" в спецблоке "Быстрый поиск", нужно в шаблоне search.tpl в сете var="small_block" в таблицу добавить ячейку с кнопкой

<input class="btn wd1" value="%%search%%" type="submit"> 

Перед изменением шаблона search.tpl включите режим отладки (Настройки системы, Раздел:Система, Модуль:Общие настройки, вкладка "Отладка"), произведите изменения, затем выйдите из режима отладки.


Работа с интернет магазином

В панели администратора (Каталог товаров - Заказы) начали исчезать заказы с определенными статусами.

В системе есть автоудаление заказов, например заказ со статусом "Отменен" удаляется через 30 дней, со статусом "Оплачивается", "Запрос" и "Распечатывается" - 7дней.

Если Вам нужно изменить сроки удаления заказов, обратитесь в http://support.amiro.ru/


Настройка интернет-магазина

Как добавить свои наборы полей в способы доставки?
  1. Создаём набор полей доставки в разделе Каталог товаров - Доставка - Наборы полей доставки
  2. Редактируем шаблоны: 
    1. Редактируем шаблон наборов полей - templates/eshop_shipping_fields.tpl
      При создании нового набора, в конец шаблоне автоматически добавляется новый сет custom_shipping_myfields(где myfields - постфикс указанный на первом шаге), содержимое которого берётся из системного сета custom_shipping_system_default
      В созданном сете необходимо указать названия переменных и добавить необходимые поля.

      Пример сета:
      <!--#set var="custom_shipping_myfields" value="
      <table id="custom_shipping_myfields" style="visibility:hidden;display:none">
        <tr>
          <td width=25 nowrap>&nbsp;</td>
          <td class="name_myfield1">%%myfield1%%*:</td>
          <td><input type="text" class=txt name="myfield1_custom" size=30 value="##myfield1##"></td>
        </tr>
        <tr>
          <td width=25 nowrap>&nbsp;</td>
          <td class="name_myfield2">%%myfield2%%*:</td>
          <td><input type="text" class=txt name="myfield2_custom" size=30 value="##myfield2##"></td>
        </tr>
      </table>
      "-->
      
    2. Добавляем языковые переменные для сайта в локализации templates/lang/eshop_shipping_fields.lng. Для языковых переменных, указанных в сете на шаге 1 необходимо задать их определение в этой локализации, к примеру:
      %%myfield1%en%%
      Field1
      %%myfield1%ru%%
      Поле1
      
      %%myfield2%en%%
      Field2
      %%myfield2%ru%%
      Поле2
      
    3. Аналогично п. 2.2 добавляем языковые переменные для панели администратора в локализации _local/_admin/templates/lang/eshop_order.lng, для отображения созданных полей в форме редактировании заказа.
    4. Если ваш сайт создан до версии 5.14.6, то в шаблоне eshop_purchase.tpl вместо старых функций setShippingModuleMethod и setComplexShippingModuleMethod нужно использовать новые. Новые функции появляются после обновления в закомментированном виде рядом со старыми.
    5. Для того, чтобы поля доставки отображались на странице подтверждения заказа нужно добавить их вывод в сете purchase_confirm шаблона eshop_purchase.tpl.
  3. Набор полей доставки необходимо включить в какой-либо из исопльзуемых способов доставки.

После выполнения пунктов 1-3 поля доставки будут доступны для ввода на шаге выбора метода доставки и при заказе информация отображается в панели управления заказами.
Как добавить кнопку "КупиВкредит" на страницу выбора способа оплаты?

1. В шаблоне eshop_purchase.tpl, содержимое сета var="body_purchase_confirm":

##purchase_confirm##

<div id="pay_buttons" align=right>
##processing_form##
</div>
<script language="javascript">
<!--
setTotalValue(window.document.entryform);
//-->
</script>
заменить на:
##purchase_confirm##
<div align="right"><b>%%choose_payment_method%%</b>: <select id="paymentMethods" name="paymentMethods" onchange="showPaymentForm(this.value)"></select></div>
<div id="pay_select_method" style="text-align: right;">
    ##processing_form##
</div>

<div class="pay_credit_button" style="text-align: right;">
    <div class="pay_with_credit" onclick="payWithCredit();openVkreditWidget();"></div>
    <div class="pay_with_credit_quest" onclick="createPayCreditPopup();"></div><br><br>
</div>

<script language="javascript"> 
    if(!AMI.find('#kupivkredit_btn') || AMI.find('#kupivkredit_btn').disabled) {AMI.find('.pay_credit_button')[0].style.display = 'none';}
    setTotalValue(window.document.entryform);
    function showPaymentForm(sName){
        var aForms = document.forms;
        for(var i = 0; i < aForms.length; i++)    {
            if(aForms[i].name.substr(0, 7)=='payment' && aForms[i].sbmt){
                aForms[i].style.display = 'none';
            }
        }
        if(sName && document.forms[sName]){
            if(aForms[sName].length){
                aForms[sName][0].style.display = 'block';
            }
            aForms[sName].style.display = 'block';
        }
        for(i=0;i<AMI.find('#pay_select_method').getElementsByTagName('form').length;i++) {
            if( AMI.find('#pay_select_method').getElementsByTagName('form')[i].name == 'paymentformkupivkredit') {
                 AMI.find('#pay_select_method').getElementsByTagName('form')[i].style.display = 'none';
            }
        }
    }
    var aForms = document.forms;
    var oPaymentMethods = AMI.find('#paymentMethods');
    for(var i = 0; i < aForms.length; i++)    {
        if((aForms[i].name.substr(0, 7)=='payment') && aForms[i].sbmt && !aForms[i].sbmt.disabled){
            oPaymentMethods.options[oPaymentMethods.options.length] = new Option( aForms[i].sbmt.value, aForms[i].name);
        }
    }
    showPaymentForm(oPaymentMethods.options[0].value);
    
    function payWithCredit() {
        for(i=0;i<AMI.find('#paymentMethods').getElementsByTagName('option').length;i++) {
            if(AMI.find('#paymentMethods').getElementsByTagName('option')[i].value == 'paymentformkupivkredit') {
                AMI.find('#paymentMethods').getElementsByTagName('option')[i].selected = true;
            }
        }
        for(i=0;i<AMI.find('#pay_select_method').getElementsByTagName('form').length;i++) {
            AMI.find('#pay_select_method').getElementsByTagName('form')[i].style.display = 'none';
        }
    }
    function createPayCreditPopup() {
        AMI.UI.Popup('<div class="pay_with_credit_help"></div><div class="close_pay_credit_popup" onclick="closePopup();"></div>',{width:784, id:'popup_close_credit', height:750, animation:{ open: 'fadein', close: 'fadeout' }});
    }
</script>
2. В common.css добавить:
#pay_select_method {text-align: right; padding-top: 10px;}
#pay_select_method br {display: none;}
#pay_select_method input {margin-bottom: 10px;}
.pay_credit_button {text-align: right;}
.pay_with_credit {
        background: url(/_local/eshop/pay_drivers/kupivkredit/kupivkredit.png) no-repeat;
        display: inline-block;
        height: 28px;
        width: 118px;
        margin-right: 5px;
        cursor: pointer;
}
.pay_with_credit_quest {
        background: url(_local/eshop/pay_drivers/kupivkredit/help.png) no-repeat;
        display: inline-block;
        height: 28px;
        width: 28px;
        cursor: pointer;
}
.pay_with_credit_help {
        position: relative;
        margin: -5px -10px -10px -14px;
        width: 784px; 
        height: 750px;
        background: url(_local/eshop/pay_drivers/kupivkredit/kupivkredit_promo.jpg) no-repeat;                        
}
.close_pay_credit_popup {
        bottom: 33px;
        cursor: pointer;
        height: 75px;
        position: absolute;
        right: 117px;
        width: 215px;
}

3.  В шаблон локализациии eshop_purchase.lng добавить:
%%choose_payment_method%en%%
Choose the payment method
%%choose_payment_method%ru%%
Выберите способ оплаты
4. Добавить картинки по адресу _local\eshop\pay_drivers\kupivkredit:

help.png - кнопка открытия попапа с изображением  kupivkredit_promo.jpg;
kupivkredit.png - кнопка КупиВкредит;
kupivkredit_promo.jpg - промо изображение.


Как вернуть стандартную кнопку " КупиВкредит"?

1. В шаблоне eshop_purchase.tpl, комментируем следующие участки сета var="body_purchase_confirm":
##--
    <div class="pay_credit_button">
        <div class="pay_with_credit" onclick="payWithCredit();openVkreditWidget();"></div>
        <div class="pay_with_credit_quest" onclick="createPayCreditPopup();"></div><br><br>
    </div>
--##
##--
    for(i=0;i<AMI.find('#pay_select_method').getElementsByTagName('form').length;i++) {
        if( AMI.find('#pay_select_method').getElementsByTagName('form')[i].name == 'paymentformkupivkredit') {
            AMI.find('#pay_select_method').getElementsByTagName('form')[i].style.display = 'none';
        }
    }
--##
##--    
    function payWithCredit() {
        for(i=0;i<AMI.find('#paymentMethods').getElementsByTagName('option').length;i++) {
            if(AMI.find('#paymentMethods').getElementsByTagName('option')[i].value == 'paymentformkupivkredit') {
                AMI.find('#paymentMethods').getElementsByTagName('option')[i].selected = true;
            }
        }
        for(i=0;i<AMI.find('#pay_select_method').getElementsByTagName('form').length;i++) {
            AMI.find('#pay_select_method').getElementsByTagName('form')[i].style.display = 'none';
        }
    }
    function createPayCreditPopup() {
        AMI.UI.Popup('<div class="pay_with_credit_help"></div><div class="close_pay_credit_popup" onclick="closePopup();"></div>',{width:784, id:'popup_close_credit', height:750, animation:{ open: 'fadein', close: 'fadeout' }});
    }
--##

Как убрать надпись "Интернет-магазин N" со страницы Истории заказов и Списка заказов в админ.части?

Нужно в шаблоне eshop_purchase.tpl в сете var="order_item_name" закоментировать вывод переменных %%order_title%% ##order_id##. Т.е. получится:

<!--#set var="order_item_name" value="##--%%order_title%% ##order_id## --## ##single_item_name####items_name_list##"-->

Особенность заключается в том, что данное действие будет применено только к новым заказам.


Можно ли добавить дополнительное поле при заказе товара?

Нужно:

  1. В шаблоне «templates/eshop_purchase.tpl» в сете «purchase_form» после
    <h4>%%billing_info%%</h4>
    добавить поле «some_field_custom», в этом сете все дополнительные поля должны иметь постфикс «_custom»
    <tr>
    <td width=”25” nowrap></td>
    <td>%%some_field_custom%%:</td>
    <td><input type="text" class="txt" name="some_field_custom" size="30" value="##some_field_custom##" /></td>
    </tr>
  2. В файле локализации «templates/lang/eshop_purchase.lng» добавить
    %%some_field_custom%en%%
    Fieldec
    %%some_field_custom%ru%%
    Поле
  3. В файле локализации «_local/_admin/templates/lang/eshop_order.lng» добавить
    %%some_field%en%%
    Fieldec
    %%some_field%ru%%
    Поле
  4. В файле локализации «_local/_admin/templates/lang/ eshop_order_letters.lng» добавить
    %%some_field%en%%
    Fieldec
    %%some_field%ru%%
    Поле

Где можно поменять реквизиты компании на свои?

В языковых шаблонах (Менеджер сайта->Шаблоны модулей->Локализации

_local/_admin/templates/lang/eshop_company_info.lng

templates/lang/_eshop_company_info.lng

templates/lang/eshop_company_info.lng


Как увеличить длину поле «Телефон» при оформлении заказа?

Чтобы увеличить максимальную длину телефонного номера, надо в строке

<input type="text" class=txt name="contact" size=30 value="##contact##" maxlength="11">

увеличить число 11. Строка находится в шаблоне eshop_purchase.tpl в сете var="purchase_form" .


Как можно вывести список товаров для каждого производителя?

Есть два варианта реализации:

  1. Создать страницу с типом  "Каталог товаров::Справочники" или  вставить  спец. блок "Данные справочников интернет-магазина". В настройках спецблока задайте необходимые значения для параметров "Отображаемый справочник", "Категория товаров" и "Быстрый переход в каталог по полю" (пример такого спец. блока есть на главной странице демо-сайта пакета "Бизнес")
  2. С помощью ссылки. При навигации по каталогу товаров, задайте нужные параметры поиска по фильтру, а затем скопируйте получившуюся ссылку и вставьте в нужном  месте сайта - переход по этой ссылке откроет список товаров производителя. Вы можете так же сократить ссылку, убрав из неё пустые параметры.

Как отредактировать список информации о доставке в письме заказа? Как привести его к виду таблицы?

Для того, что бы список информации о доставке в письме привести к виду таблицы, необходимо:


В шаблоне _order_letters.tpl (или _order_letters_ru.tpl, если у вас включена мультиязычность), в сете var="order_additional_info_adm_ru;order_additional_info_ru" (или var="order_additional_info", если шаблон _order_letters_ru.tpl) добавить следующие переменные:

##custom_get_type_name## - способ доставки.
##custom_city## - Город.
##custom_street## - Улица.
##custom_house## - Дом.
##custom_building## - Корпус.
##custom_app## - Квартира\Офис.
##custom_zip## - Почтовый индекс.
##custom_entrance## - Подъезд.
##custom_floor## - Этаж.
##custom_code## - Код.
##custom_delivery_date## - Дата доставки
##custom_delivery_time## - Время доставки
##custom_station## - Станция метро
##custom_contact## - Телефон пользователя

Добавить эти переменные нужно после ячейки с переменной ##cust_info## (при этом для ячейки с этой переменной нужно задать стиль style="display: none;"). Для того, чтобы задать корректный вид  списка этих переменных, нужно задать таблицу для них следующим образом (пример для начала, в дальнейшем выполняется аналогичный алгоритм):

<tr>
<td colspan="2">##cust_info##&nbsp;</td>
</tr>
##if(custom_city != "")##
<tr>
<td>custom_city:</td><td>
##custom_city##
</td>
</tr>
##endif##
##if(custom_contact != "")##
<tr>
<td>custom_contact:</td><td>
##custom_contact##
</td>
</tr>
##endif##

где строки вида ##if(custom_city != "")## - проверки на заполненность, что бы не выводились пустые строки.


Как сделать так, что бы поле e-mail на странице оформления заказа было не обязательно?

Для того, что бы на странице быстрой регистрации пользователь мог не заполнять поле "e-mail", нужно в шаблоне eshop_purchase.tpl   в сете var="purchase_form"  участок JS кода

if (isEmail(form.email.value) == false) {
errmsg+='Некорректный адрес!\n\n';
form.email.focus();
alert(errmsg);
return false;
}

необходимо заменить на следующий:

if (form.email.value !== '' && isEmail(form.email.value) == false) { //изменили условия проверки "если не пустое"
errmsg+='Некорректный адрес!\n\n';
form.email.focus();
alert(errmsg);
return false;
}
// добавление несуществующего e-mail
if (form.email.value === '') form.email.value = 'no-email@demo.ru';

Как добавить/убрать/изменить время доставки?

Время доставки задаётся в шаблоне eshop_purchase.tpl, в сете var="shipping_addon", в участке кода:

 %%delivery_time%%:    
      <select class="style" name="delivery_time_custom">
        <option value="" selected="selected">%%select%%</option>
        <option value="%%del_time_1%%">%%del_time_1%%</option>
        <option value="%%del_time_2%%">%%del_time_2%%</option>
      </select>

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

%%del_time_2%%, где %%del_time_N%% - языковая переменная с нужным значением времени.


Отредактировать/добавить новые языковые переменные с временем доставки вы можете в языковом шаблоне eshop_purchase.lng (Менеджер сайта - Шаблоны модулей - Локализации).


Вот так выглядят переменные с временем доставки по-умолчанию:

%%del_time_1%en%%
From 1pm to 6pm
%%del_time_1%ru%%
С 13 до 18 часов

%%del_time_2%en%%
From 6pm to 11pm
%%del_time_2%ru%%
С 18 до 23 часов

Настройка каталога товаров

Как изменить кнопки оплаты на странице оформления заказа?
Вид этих кнопок задаётся в соответствии со стандартными <input>-кнопками на всём сайте.

Для того, что бы кастомизировать вывод отдельных кнопок, необходимо производить изменения в шаблоне eshop_purchase.tpl, в сетах вида var="processing_button_..".

Каждый сет отвечает за определённую кнопку(определённый способ оплаты).

Его код должен соответствовать функционально коду оригинальной кнопки.
Получить код оригинальной кнопки возможно через исходный код страницы.

Изменить надписи на стандартных кнопках оплаты возможно в языковом шаблоне eshop_purchase.lng(Менеджер сайта - Шаблоны модулей - Локализации).
Как сделать так, что бы в главном меню выводились ссылки на категории каталога товаров?
Для этого необходимо создать отдельную страницу в менеджере сайта с типом "Ссылка" и задать ей отображение в блоке главного меню. В качестве страницы, на которую будет вести эта страница-ссылка, необходимо указать страницу с типом "Каталог". В самом поле "ссылка", нужно указать путь до нужной категории/товара (например katalog/katalog/konstruktory).
При работе со спец. блоком категорий каталог товаров, были обнаружены переменные open_parent_branch и open_branch. Какого их назначение?
Суть этих переменных - показывать какие ветки открыты, а именно:

##open_parent_branch## - принимает значение "1", если родитель элемента находится в открытой ветке.

##open_branch## - принимает значение "1", если сам элемент находится в открытой ветке.
Как сделать чтобы покупатель мог выбирать цвета товара при заказе?
Для этого необходимо создать свойство-подвид и выполнить следующие действия:
  1. Создать новый справочник(к примеру, "цвет").
  2. Задать для этого справочника элементы - указав в их названии цвет текстом и добавив для элементов изображение. Пример:
  3. На странице редактирования свойств(описания свойств), для свойства-подвида необходимо указать следующие параметры:
    1. Тип: Строка
    2. Хранить как: По значению из справочника
    3. Справочник - источник данных: Текущий: (выбрать созданный. Так, к примеру, созданный ранее "Цвет")
  4. В шаблоне _eshop_item_list.tpl, строку
    <!--#set var="itemD_property_cell" value="'##name##', "-->
    заменить на строку
    <!--#set var="itemD_property_cell" value="'##name####if(picture)####picture####endif##', "-->
  5. В шаблоне _eshop_item_list.tpl, код
    <!--#set var="itemD_picture;itemD_small_picture;itemD_big_picture" value="
    <img class="eshop-item-detailed__img" src="##picture##" title="##title##" alt="##title##" width="##width##" height="##height##" />
    "-->
    заменить на строку
    <!--#set var="itemD_picture;itemD_small_picture;itemD_big_picture" value="<img class="eshop-item-detailed__img" src="##picture##" title="##title##" alt="##title##" width="##width##" height="##height##" />"-->
  6. Задать этот подвид для товаров.

Как сделать так, чтобы описание Категории выводилось только на первой странице списка товаров и не выводилось при переходе на следующие страницы (кнопки навигации).

Поставьте в шаблоне _eshop_item_list.tpl в сете var="body_items" для переменной ##description## следующую проверку:

##if(!offset)## ##description## ##endif##

Как сократить ссылки до товаров и категорий каталога товаров?
  1. В адресе:

    http://business.amiro.ru/katalog/katalog-igrushek/eastcolight-gong-kong

    katalog/ - адрес страницы с типом "Каталог товаров"

    katalog-igrushek/ - основная, родительская категория

    eastcolight-gong-kong/ - категория с товарами.

  2. В каждой категории можно указать свой адрес (Каталог товаров - Каталог - Категории, вкладка "Параметры и SEO", параметр "Ссылка: " ). 

    Так, к примеру, на демо-версии пакета "Бизнес" категория "Eastcolight (Гонг-Конг)" имеет адрес: http://business.amiro.ru/katalog/katalog-igrushek/eastcolight-gong-kong , а в параметре "Ссылка" он указан как katalog-igrushek/eastcolight-gong-kong.

     У этой категории мы можем сократить адрес до: http://business.amiro.ru/katalog/eastcolight-gong-kong , указав в ссылке этой категории значение "eastcolight-gong-kong"

     Так же, вы можете убрать из адреса catalog/ , задав главную страницу как каталог товаров(т.е. задать для главной страницы тип "Каталог товаров" )


Как поставить условие на отображение дополнительных цен
  • Для того, чтобы скрыть базовую цену при определённом её значении, необходимо в шаблоне _eshop_item_list.tpl, в сете базовой цены - var="item_base_price;search_item_base_price;itemD_base_price" задать проверку на значение переменной price0 (эта переменная является значением базовой цены, которое задано в панели администратора). Сет с проверкой будет иметь такой вид(в общем):

    <!--#set var="item_base_price;search_item_base_price;itemD_base_price"value="
    ##if(price0 != 0)##
    <div class="item_base_price">
    Остальное
    содержимое сета</div>##endif##"-->

    В данном случае делается проверка на значение цены "0".

  • В случае с скрытием доп. цен ситуация обстоит иначе. Необходимо задавать новые, кастомизированные под каждую цену сеты.

    1. По-умолчанию за отображение всех доп. цен отвечает сет var="item_other_price;search_item_other_price;itemD_other_price".

      Кастомизация сета будет производиться по идентификационной переменной каждой доп. цены - num_prices, по следующему прицнипу (на примере 3х доп. цен):

      Делаем копии этого сета таким образом, что получаем 3 абсолютно одинаковых сета. Затем, в названии каждого сета приписываем идентификационную переменную (num_prices) с нужным значением:

      var="item_other_price(num_prices=1);search_item_other_price(num_prices=1);itemD_other_price(num_prices=1)"
      var="item_other_price(num_prices=2);search_item_other_price(num_prices=2);itemD_other_price(num_prices=2)"
      var="item_other_price(num_prices=3);search_item_other_price(num_prices=3);itemD_other_price(num_prices=3)"

      Теперь, каждый сет будет выводить соответственно только 1-ую, 2-ую и 3-ю доп. цены.

    2. Теперь, мы можем для каждого сета задать проверку, аналогичную описанной в п.I, за тем исключением, что вместо price0 теперь будут условия с переменными price1, price2, price3 соответственно.



Как изменить код и внешний вид кнопки финального оформления заказа?

Изменить отображение этой кнопки можно в шаблоне еshop_purchase.tpl, в сете var="processing_button_STUB_DRIVER" (содержимое, при его наличии, этого сета перебивает стандартную кнопку).

Для корректности добавления кнопки, скопируйте начальный код кнопки, открыв исходный код страницы.


У меня есть свойство «минимальная партия товара», как  сделать так, что бы по-умолчанию количество товара для покупки соответствовало по значению этому свойству?

Для того, что бы в поле количества товара при добавлении в корзину выставлялось какое-либо значение (к примеру, свойство товара "мин. партия товара"), необходимо:

  • Создать свойство, которое будет являться нужным нам значением(к примеру, "мин. партия товара").
  • Получить значение созданного свойства для поля кол-ва товара возможно, задав для этих свойств новый сет:

    В шаблоне _eshop_item_list.tpl нужно создать копию сета var="itemD_custom_field" и изменить его название следующим образом:
     var="itemD_custom_field(custom_field_title=мин. партия товара);item_custom_field(custom_field_title=мин. партия товара);urgent_item_custom_field(custom_field_title=мин. партия товара)"
    Где "мин. партия товара" - название созданного свойства.
    Далее, в получившемся сете нужно:
    1. Задать глобальную переменную:##setglobalvar @minimum = custom_field##
    2. Вместо переменной ##custom_field## вставить следующий код:
      <input type=textid="myfield##idG##" name="minimum" value="##IF(custom_field
      != "")## ##custom_field## ##else## 1 ##endif##" readonly>
  • Для вывода значения, необходимо:

    1. В сете базовой цены(var="item_base_price;search_item_base_price;itemD_base_price"), в строке:

      <input type=text name="qty" value="1" class="txt">:

             а) вместо value="1" вставить следующий код:

           value="##IF(minimum !="")## ##minimum## ##else## 1 ##endif##"

            б) добавить в этот тэг ещё один аттрибут: id="myfield##idG##_target"

      т.е. в итоге этот тэг будет выглядеть следующим образом:

      <input type=text name="qty" id="myfield##idG##_target" value="##IF(minimum != "")## ##minimum## ##else## 1
      ##endif##" class="txt">
    2. В этом же сете нужно создать глобальную переменную: ##setglobalvar @idG = id##

    3. В самом начале этого сета (после value=") необходимо вставить следующий JS-код:

      <script type="text/javascript">
      var oInputs = document.getElementsByTagName('INPUT');
      for(var i = 0; i <oInputs.length; i++){
      if(oInputs[i].id.indexOf('myfield')== 0 && oInputs[i].id.indexOf('_target') == -1){
      var oTarget = document.getElementById(oInputs[i].id + '_target');
      if(oTarget != null){
      oTarget.value = oInputs[i].value;
      }
      }
      }

Как сделать связанные товары?

Необходимо создать свойство "Что еще купить с этим Товаром", данное свойство должно иметь "Тип значения свойства" как "Связанные товары". После этого, в режиме редактирование товара, появится возможность выбора связных товаров.

Для того, чтобы настроить дизайн "Что еще купить с этим Товаром", необходимо в шаблоне _eshop_item_list.tpl:

  1. Объявить свойство (обратившись по его порядковому номеру, например, 29):
    <!--#set var="itemD_custom_field_29_list" value="
    ##IF(custom_field != "")##
    <div class="itemD_custom_field_multi_related_items_list">
    ##custom_field##
    </div>
    ##ENDIF##
    "-->
  2. Настроить дизайн (как будет выглядеть список), например:
    <!--#set var="itemD_custom_field_29;itemD_custom_field_29" value="
    <div class="itemD_custom_field_multi_related_items">
    <a href="##eshop_catalog_script####nav_data##">##small_picture##</a>
    <div class="connection_name" align="left" style="margin-bottom:5px;">
    <a href="##eshop_catalog_script####nav_data##" >##name##</a></div>
    <div class="prices"><b>:</b> ##price_origD## ##priceD## ##price_diffD##</div>
    </div>
    ##--common_custom_fields--##"-->
    где ##price_origD## ##priceD## ##price_diffD## цены, глобализованные в сете var="item_base_price;search_item_base_price;itemD_base_price" value="" , например:
     ##setglobalvar @priceD=price##
  3. Вызвать свойство в нужном месте, в сете itemD_detail, например:
    ##if (custom_field_29 != "") ##
    <div style="width:615px; padding-left:14px; ">##custom_field_29##</div>
    ##endif##

Как сделать подвиды товаров?

Необходимо создать свойства "Цвет", "Размер" и т.д. с "Тип свойства: Является подвидом товара". После этого в админ.части в редактировании товара появится возможность заполнения "Наличие подвидов товаров:[остатки на складе:]". В редактировании подвидов заполняются "Товары в наличии", а также "Список правил влияния на параметры товаров". Также нужно указать количество подвидов.

Важно!!! Особенность подвидов заключается в том, что сам товар становится невозможным купить, можно купить лишь подвид данного товара. Покупка подвидов возможна только по базовой цене. Отображение и покупка подвидов осуществляется в карточке товара. Также в системе нет импорта подвидов.


Можно ли определить, стоит ли у товара галочка Новинка? Хотим вывести картинку-надпись "Новинка", в случае, если эта галочка отмечена, т.е. если товар обладает этим признаком? Да, для этого нужно:
  1. Включить режим отладки (Настройки системы, Раздел:Система, Модуль:Общие настройки)
  2. В шаблоне _eshop_item_list.tpl сделать распечатку переменных (функция ##__PRINT_VARS__##) в сете var="item_row;urgent_item_row;search_item_row;cat_item_row"
  3. Найти чему равна переменная on_special для товаров, отмеченных как Новинки (пуcть N)
  4. В сете var="item_row;urgent_item_row;search_item_row;cat_item_row" сделать проверку:
    ##if(on_special =='N')## Новинка ##endif##

Как добавить водяные знаки для картинок в Каталоге товаров?

Нужно на ftp в папку _mod_files/ce_images/watermarks/ залить прозрачный водяной знак (в формате .gif или .png) . Далее при добавлении нового товара или редактировании имеющегося в окне «Изображение» появится возможность «Наложить водяной знак на загружаемые изображения». Необходимо в выпадающем списке выбрать «Водяной знак», указать «Метод наложения» и «Прозрачноcть».


Как сделать так, чтобы фильтр в Каталоге автоматически искал в подкатегориях, и скрыть строку с галочкой «Искать в подкатегориях»?

Для этого нужно в шаблоне filter_form.tpl в сете var="field_subcats_search" тегу <input> поставить checked, а ячейке, в которой он находится задать display:none

Таким образом, получится:

<!--#set var="search_subcat" value="
<div style="display:none;">
<input CHECKED helpId="##help_id##" class="check" type="checkbox"
name="search_subcats" value="##value##" style="zoom:0.8"
id="flt_search_subcats">
</div>"-->

Как осуществить попеременный окрас свойств?
  1. При помощи стандартных средств JS:

    Разработать/использовать готовый скрипт, который бы попеременно перекрашивал строки (при этом, возможно, возникнет необходимость кастомизировать поля свойств таким образом, что бы они выводились в таблице).

  2. Через ручной вывод свойств:

    В системе есть возможность выводить свойства не общим списком, а через их переменные (при этом их кастомизировать не обязательно, но возможно), т.е. в нужном месте сета (списка товара или детального отображения товара) задается переменная вида: ##custom_field_NN## - она выведет само свойство, как оно задаётся в его сете. При этом вы можете как отключить вывод этого свойства в общем списке, так и закомментировать всю переменную ##custom_field_list## (удалять переменные нежелательно, для облегчения дальнейшего редактирования сайта и во избежание возможным ошибок).

    Пример:

           Раздел свойств 1:
    1)##custom_field_12##
    2)##custom_field_14##
    3)##custom_field_15##
    4)##custom_field_17##
    Раздел свойств 2:
    5)##custom_field_18##
    6)##custom_field_19##
    7)##custom_field_21##
    Раздел свойств 3:
    8)##custom_field_22##
    9)##custom_field_23##

    Таким образом, нужно  задать каждому разделу свой цвет фона.

  3. Через кастомизацию:

    В шаблоне _eshop_item_list.tpl, создаём сет свойства, к примеру:

     <!--#set var="itemD_custom_field_NN" value=" 
    ##IF(custom_field != "")##
    <b>##custom_field_title##:</b> <br> ##picture## ##custom_field##
    ##ENDIF## "-->

    В этом сете:

    В начале названия itemD указывает на то, что свойство используется на странице детального отображения товара.

     Custom_field - указывает на то, что это общая структура свойства(если, к примеру, название свойства имеет вид

      var="itemD_custom_picture_NN", то это кастомизация изображения для свойства с соответствующим номером)

    NN-номер свойства - столбец "Номер свойства" в списке свойств в панели администратора (Каталог товаров - Наборы свойств - Описания свойств)

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


Как сделать поле «есть в наличии»/«нет в наличии»?

Есть несколько вариантов осуществления этой задачи:

Использование поля "Остаток:" или создание свойства для товара, с соответствующим значением. В обоих случаях задаётся проверка, но по тому или иному полю.

  • В случае с использованием системного поля остаток:
    1. В шаблоне _eshop_item_list.tpl, в сете var="itemD_detail" задаёте проверку:
      ##if(rest == 0)##
      здесь текст/картинка, которые будут выводиться, если
      остаток товара 0
      ##endif##
    2. В сетах цен (в примере рассмотрен сет базовой цены - var="item_base_price;search_item_base_price;itemD_base_price"), в участке кода, между ##if(ESHOP_BUY_ZERO=="1")## и ##endif## задаём условие ##if(rest != 0)## (для всего это участка кода, кроме самого условия), как и было рассмотрено выше - это будет скрывать кнопки покупки и добавления в корзину, если остаток нулевой, только вместо содержимого этой проверки там будет находиться часть содержимого сета.
    3. Далее, если необходимо выводить такую же надпись в списке товаров, то это условие необходимо задавать для сета var="item_row;urgent_item_row;search_item_row;cat_item_row" (так же возможен его вариант как var="item_row")

      Так же, аналогичным образом, нужно задать такое же условие для сетов var="cat_item_Hsplitter;item_Hsplitter" и var="cat_item_Vsplitter;item_Vsplitter", которые находятся в шаблоне eshop_catalog.tpl

      *Если необходимо при этом скрывать позицию с товаром(отображать вместо неё надпись), то проверка будет выглядеть несколько иначе:

      ##if(rest == 0)##
      здесь текст/картинка, которые будут выводиться, если
      остаток товара 0
      ##else##
      содержимое сета.
      ##endif##
  • В случае с использованием свойства:
    1. Задаёте новое свойство для товаров ( подробнее о задании свойств)
    2. Кастомизируете его (подробнее о кастомизации )
    3. В сете свойства глобализуете переменную ##custom_field## (##setglobalvar @custom_fieldD = custom_field##) в сете созданного свойства. Далее, задаёте проверку в ценах, так же, как описано выше, но по значению свойства - по переменной ##custom_fieldD##  (##(if custom_fieldD == "В наличии")## )

Как сделать разделитель после последнего элемента анонса товаров?

Для того, что бы после последнего элемента появлялся разделитель, нужно:

В шаблоне eshop_home.tpl, в сете var="on_special"  после переменной ##list## (список спец. товаров) добавить код нужного разделителя.


Как вывести описание элемента справочника на странице товара?

Вывести описание элемента справочника можно при помощи переменной ##custom_field_description##

Вывести эту переменную можно в шаблоне каталога товаров (_eshop_item_list.tpl), в сете свойств товара (var="itemD_custom_field") на странице детального отображения товара.

Пример:

<!--#set var="itemD_custom_field" value="##IF(custom_field != "")##
<b>##custom_field_title## ##details##:</b>##--picture--##
##custom_field## ##val_details## ##custom_field_description##
##ENDIF##"-->


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

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

в шаблоне _eshop_item_list.tpl, в сете var="item_base_price;search_item_base_price;itemD_base_price" закомментировать условие ##if(ESHOP_BUY_ZERO=="1")##, а вместо него задать свойство ##if(property_data == "Список свойств для товара пуст")##

##--if(ESHOP_BUY_ZERO=="1")--##
##if(property_data == "Список свойств для товара пуст")##
<form name="qty_##itemid##_0" onSubmit="return false;" class="buy_form">
<nobr><input type=text name="qty" value="1" class="txt"></nobr>
<span>&nbsp;&nbsp;</span>
<nobr>&rarr;&nbsp;<a href="javascript:AddToCart('##script_link####nav_data##itemId=##itemid####add_params##&action=add', ##itemid##, 0)" class="a_addtocart">%%addtocart%%</a>
<span>&nbsp;&nbsp;|&nbsp;&nbsp;</span></nobr>
<nobr>&rarr;&nbsp;<a href="javascript:AddToCart('##buy_link##?itemId=##itemid####add_params##&eshop_special=1&action=add', ##itemid##, 0)" class="a_purchase">%%purchase%%</a></nobr>
</form>
##endif##

Как задать уникальное отображение одной категории?

Задать уникальное отображение для разных категорий вы можете следующим способом:


В шаблоне каталога товаров - _eshop_item_list.tpl, в сете списка товаров - var="item_row;urgent_item_row;search_item_row;cat_item_row" задайте проверку(возможно как по ID категории, так и по адресу страницы).

Синтаксис проверки(условия):

##if(переменная == 'значение')##
(если значение нужно "не равно", то !=)
содержимое, если условие выполняется
##else##
содержимое, если условие не выполняется
##endif##

так же, возможен вариант без else:

##if(переменная == 'значение')##
содержимое, если условие выполняется
##endif##

Если нужно несколько условий в одной проверке, то между ними могут быть разделители - ||(или) и &&(и), к примеру:

##if(переменная == 'значение' || переменная2 == 'значение2')##
содержимое, если условие выполняется
##endif##

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

Для того, чтобы изменить навигацию по каталогу необходимо:

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

    Задать отображение товаров подкатегорий в категориях.(Параметры "Отображение подчиненных товаров" или " Включать в список товары всех подкатегорий, начиная с уровня")

  2. Для того, чтобы скрыть возможность перехода по категориям со страниц каталога товаров:

    Скрыть список категорий в блоке "текст" на страницах каталога товаров вы можете в шаблоне _eshop_catalog.tpl, в сете var="catD_row;urgent_catD_row", закомментировав всё содержимое сета, кроме переменной ##cat_items##.


Как сделать интервалы между свойствами на странице списка свойств?

Изначально, все свойства, которые выводятся в карточке товара и списке товаров, выводятся через переменную ##custom_field_list##(шаблон _eshop_item_list.tpl, сеты var="itemD_detail"(карточка товара) и var="item_row;urgent_item_row;search_item_row;cat_item_row" (список товаров)).


Свойства, у которых задан атрибут "Не использовать в общем списке:"(каталог товаров - наборы свойств - описания свойств) в этой переменной не выводятся.


Системные свойства "Вертикальный разделитель" и "Горизонтальный разделитель" служат для изменения внешнего вида фильтра каталога товаров.

Варианты осуществления интервалов:

  1. Завязанный на изменённом определённом свойстве:

    В шаблоне _eshop_item_list.tpl, создаём сет свойства, к примеру:

    <!--#set var="itemD_custom_field_NN" value=" 
    ##IF(custom_field != "")##
    <b>##custom_field_title##:</b> <br> ##picture## ##custom_field##
    ##ENDIF## "-->

    В этом сете:

    В начале названия itemD указывает на то, что свойство используется на странице детального отображения товара.

     Custom_field - указывает на то, что это общая структура свойства(если, к примеру, название свойства имеет вид

      var="itemD_custom_picture_NN", то это кастомизация изображения для свойства с соответствующим номером)

    NN-номер свойства - столбец "Номер свойства" в списке свойств в панели администратора (Каталог товаров - Наборы свойств - Описания свойств)

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

  2. Через новое свойство:

    Создаётся новое свойство (к примеру, "разделитель"), кастомизируется (как описано в пункте 1) так, чтобы представляло из себя разделитель. В дальнейшем просто вставляется в наборе свойств в нужном месте.

    Пример:

    <!--#set var="itemD_custom_field_NN" value="<br><hr><br>"-->  
  3. Через ручной вывод свойств:

    В системе есть возможность выводить свойства не общим списком, а через их переменные (при этом их кастомизировать не обязательно, но возможно), т.е. в нужном месте сета (списка товара или детального отображения товара) задается переменная вида: ##custom_field_NN## - она выведет само свойство, как оно задаётся в его сете. При этом вы можете как отключить вывод этого свойства в общем списке, так и закомментировать всю переменную ##custom_field_list## (удалять переменные нежелательно, для облегчения дальнейшего редактирования сайта и во избежание возможным ошибок).

    Пример:

           Раздел свойств 1:
    1)##custom_field_12##
    2)##custom_field_14##
    3)##custom_field_15##
    4)##custom_field_17##
    Раздел свойств 2:
    5)##custom_field_18##
    6)##custom_field_19##
    7)##custom_field_21##
    Раздел свойств 3:
    8)##custom_field_22##
    9)##custom_field_23##

Как сделать расширенный поиск по каталогу?

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


Осуществить подобное отображение можно с помощью JS-скрипта:

  1. Нужно в наборе свойств сначала вывести общие свойства, затем свойства для расширенного поиска. Между ними вставить специальный разделитель и задать ему идентификатор.
  2. Написать JS-скрипт, который будет изначально скрывать все свойства после разделителя и выводить их при нажатии на кнопку "расширенный поиск".

Как настроить "хлебные крошки" в каталоге? Как убрать ссылку на корневую категорию "Общий каталог" или "Каталог товаров"?

За навигацию в каталоге товаров отвечает переменная ##cat_path##, вызывается в шаблоне _eshop_item_list.tpl, формируется в шаблоне eshop_catalog.tpl в разделе Categories path sets


Чтобы убрать из пути ссылку "Общий каталог", нужно в шаблоне eshop_catalog.tpl в сетах var="cat_nav_name;urgent_cat_nav_name" и var="cat_name;urgent_cat_name" поставить проверку на 0-ой уровень каталога, а в сете var="cat_Hsplitter;urgent_cat_Hsplitter" на 1-ый.


Пример проверки ниже:

##if(level != '0')##<nobr><b>##name##</b></nobr>##endif##

Как скрыть товары с нулевой/пустой/какой-либо ценой?

Для того, что бы скрывать товары с определённым значением цены, в списке товаров, можно задать проверку.


Сделать это возможно в шаблоне _eshop_item_list.tpl, в сете var="item_row;urgent_item_row;search_item_row;cat_item_row", задав в начале сета условие: ##if(price0 != "0")##, а в конце сета задать ##endif##.

Это будет скрывать все товары, у которых базовая цена задана как 0.


Аналогичным образом, нужно задать такое же условие для сетов var="cat_item_Hsplitter;item_Hsplitter" и var="cat_item_Vsplitter;item_Vsplitter", которые находятся в шаблоне eshop_catalog.tpl

*Скрывать товары таким образом, нежелательно, т.к. может оказаться, что на определенной странице товаров нет вообще или стоит 2 вместо 10. Лучше вместо нулевой цены выводить  некоторый текст/картинку. Например, "товара нет в наличии" или "ожидается".


Как сделать разные макеты в разных разделах каталога и/или в карточке товара?

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

1. Изменение структуры макета на странице детального отображения товара:

  1.  В шаблоне _eshop_item_list.tpl, в сете var="itemD_detail", задаём глобальную переменную:
    ##setglobalvar @show_checkD='1'##
  2. В макете задаём if проверку:
    ##IF(show_checkD !="1")## здесь содержимое макета, которое будет
    скрыто на странице карточки товара ##endif##
    если скрыть всё, оставить только саму карточку товара, то оставляем только ##lay_body_body##
    ##IF(show_checkD != "1")## и здесь всё оставшееся ##endif## 

    *Важное условие: не нарушать логику построения макета, т.е. не оставлять "болтающихся" открывающих/закрывающих тэгов.

  3. Таким образом, можно для динамичных страниц задавать даже разные макеты, т.е. проверка будет выглядеть так:
    ##IF(show_checkD == "")## здесь содержимое макета, которое будет 
    скрыто на странице карточки товара
    ##else## А здесь макет для карточки товара
    ##endif##

2. Изменения какой-либо части(фона сайта, шапки сайта, и т.п.)

Допустим, нам нужно, чтоб фон сайта был зависим от категории.

Принцип:

  1. В менеджере сайта, в блоке шапки задаём класс для таблицы шапки(в макете проблематично,

    т.к. для ячейки шапки уже задан свой идентификатор - id="lay_f..."):

    class="header_table##IF(ID_CATEGORY ==20057 || ID_CATEGORY == 20055
    ||ID_CATEGORY == 20054 || ID_CATEGORY == 20053)####ID_CATEGORY##
    ##ENDIF##

    (|| - означает "или", т.о. по-умолчанию в глобальных стилях присутствует только стиль .header_table),

  2. Затем в глобальных стилях задаём классы(к примеру):

    .header_table {background:url("../../_mod_files/ce_images/New/00_home_cutted1.png") no-repeat;} //стиль по-умолчанию
    .header_table20057 {background:red;} //стиль для определённой категории
    .header_table20055 {background: green;}
    .header_table20054 {background: blue;}
    .header_table20053 {background: purple;}

3. Использовать идентификатор макета.

В шаблоне _eshop_item_list.tpl, в сете var="item_row;urgent_item_row;search_item_row;cat_item_row" value=" дописать в ссылках на карточку товара lay_id=100 (100 - номер макета).

Пример:

<a href="##script_link####nav_data##lay_id=100" class="name">
##name##</a>

При использовании указанных способов и их комбинации можно создавать динамичные макеты,

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


Ограничение доступа

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

  1. В макете сайта, в самом начале(но не нарушая его структуру) нужно задать проверку:
    ##IF(MEMBER_LOGGED_IN  == 0)##
    Здесь содержимое страницы, если пользователь не авторизован
    ##else##
    А здесь, если авторизован(макет по-умолчанию)
    ##endif##
  2. При данной проверке всё содержимое сайта будет скрываться, если пользователь не авторизован(и в панели администратора так же). Для того, что бы привязать скрытие макета к определённым страницам, можно:
    • Для страниц с проверкой задать свой макет.
    • - Включить в проверку дополнительное условие:
      ##IF(MEMBER_LOGGED_IN  == 0 &amp;&amp; page_name == .....)##
      для нескольких страниц:
      ##IF((MEMBER_LOGGED_IN  == 0 &amp;&amp; page_name == ...) ||
      (MEMBER_LOGGED_IN == 0 &amp;&amp; page_name == ...))##
    *Вместо page_name можно использовать переменную script_nav_link, которая является адресом текущей страницы.

Как запретить пользователям добавлять новые темы на форуме?

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

Для этого нужно в шаблоне forum.tpl, в сетах:

  1. var="itemD_list" закомментировать тэги <a>, содержащие языковую переменную %%btn_new_topic%%
    <a ref="nofollow" href="##script_link##/##cat_sublink##?
    display_form=1#forumForm"> %%btn_new_topic%%</a>
  2. var="body_items" закомментировать тэг <a>, содержащий языковую переменную %%create_topic%% т.е. закомментировать участок кода:
    <a href="javascript:void(0)" onclick="return displayTopicForm(true);"
    id="link_create_topic">%%create_topic%%</a>

Нужно организовать доступ в категорию только в том случае, если человек зарегистрирован.

Делается это проверкой следующего вида:

##IF(MEMBER_LOGGED_IN == 0 && ID_CATEGORY == 20048 || MEMBER_LOGGED_IN == 0 &&
ID_CATEGORY == 20049)##
здесь содержимое страницы, если пользователь не зарегистрирован
##else##
а здесь, если зарегистрирован
##endif##

Данная проверка вставляется в несколько сетов, в шаблоне _eshop_item_list.tpl: var="item_row", var="item_list" (так же не забываем про аналогичные сеты, но с приставками urgent_ и search_).


Так же, в проверке используются ID категорий – узнать их можно 2мя способами:

  • При помощи функции ##__PRINT_VARS__##

  • Во вкладке «Параметры и SEO» в панели администратора(в адресной строке и в поле «Идентификатор, используемый для обмена данными:»)

Как выключить или закрыть сайт на профилактику?

Решить задачу возможно несколькими способами:

  • Если версия системы старше 6.0.4, то возможно использовать готовый модуль.
  • Можете поставить "заглушку" на Главную страницу сайта:перенесите все содержимое с Главной страницы на временную, а на Главной напишите текст "Сайт временно недоступен".
  • С помощью js-редиректа:

    пропишите приведенный ниже скрипт в самый верхний блок макета страницы на самую верхнюю строчку

    <script type="text/javascript">window.location.href="http://sitename.ru/temp.html"</script>

    где temp.html - созданный файл с текстом "Сайт временно недоступен", который нужно поместить на ftp в корневую папку.


 

Версия для печати

Установка и настройка Руководство пользователя Интеграция дизайна Разработчикам (API)
 2000 – 2021 © Amiro.CMS Все права защищены.