Перейти к содержимому


Castiel

Регистрация: 19 нояб. 2013
Offline Активность: 03 мая 2017 11:36
*****

#214316 Социальные Сети

Отправлено Castiel на 26 Октябрь 2015 - 00:16

Просмотр сообщенияyuragravi (25 Октябрь 2015 - 20:19) писал:

в этой версии 3.0 иконку однокласн. не поддерживает увы, похоже

Здравствуйте, Вы можете самостоятельно обновить версию иконок fontawsome и тогда будет поддерживаться иконка с одноклассниками.
Для этого вам необходимо скачать последнюю версию font awsome на официальном сайте или по прямой ссылке (версия 4.4) или из вложения

После скачивания архива font-awsome-4.4.0 необходимо извлечь все содержимое архива
Предварительно удалите старые файлы иконок в Редакторе шаблонов (FontAwesome.otf, fontawesome-webfont.eot, fontawesome-webfont.svg, fontawesome-webfont.ttf, fontawesome-webfont.woff, fontawesome-webfont.woff2)
Затем найти файлы в папке fonts и загрузить их к себе в шаблон через Редактор шаблонов - Добавить файлы (зеленая кнопка).
Далее в Редакторе шаблонов находим файл font-awesome.css и удаляем его.
Загружаем прикрепленный файл font-awesome.css через Редактор шаблонов - Добавить файлы (зеленая кнопка).

Прикрепленные файлы




#309 Упрощаем работу с шаблонами

Отправлено d.stepachev на 12 Ноябрь 2010 - 01:55

Довольно часто в нашей практике случается так что хочется изменить шаблон, сделать его под себя, более уютным и домашним, но возникает не разрешимая проблема когда нужно понять что это за не понятные конструкции вида
{VARIABLE}
или например:
{% IF VARIABLE %}
страшный код...
{% ELSE %}
еще более страшный код...
{% ENDIF %}
И видя этот хаос непонятных данных отпадает всякое желание что-то менять, более того спрашивать какие переменные есть на сайте, а каких нет, тоже довольно не удобно каждый раз задавай вопрос в техническую поддержку проекта и дожидаться ответа от нескольких минут до часа или двух.
Всё взвесив мы решили максимально сократить бюрократическую составляющую этого процесса и попытаться донести знания до людей. Для возможности каждому реализовывать свои самые смелые фантазии и воплощать палитру красочных идей в буйстве цветовых образов мы сделали две простых, но в то же время основополагающих вещи:

Ввели функции отображения всех переменные имеющиеся в шаблонах.
Вызываются они очень просто. Вставляете следующий код в любом из шаблонов, редактора тем:
{print_vars}
чтобы отобразить список всех доступных на сайте переменных.
{print_arrays}
чтобы отобразить список всех массивов доступных на сайте.
{print_r}
чтобы отобразить и переменные и массивы
И свет информации начнёт пробиваться сквозь туман непонимания.

Документация по функциональным возможностям в работе с переменными ну и конечно же примеры
Честно сказать мы долго тянули с выкладыванием этой информации в свет, за что приносим всем заинтересованным лицам глубочайшие извинения. Документация в разрозненном виде была готова в мае-июне, но никак руки не доходили собрать все в едином месте, да и места куда выложить и обсудить тогда не было, сейчас есть, поэтому постараюсь ёмко но без занудства рассказать о нашем шаблонизаторе.

Итак, шаблонизатор использует 2 основных вида конструкций:
1) Вывод данных в различном формате
2) Логические операции

Пойдём по порядку.

Вывод данных

Вывод основной переменной
{PAGE_TITLE}
выведет Заголовок страницы

Вывод переменной внутри цикла
{goods.name}
Такой вид записи используется в циклах и в данном виде выведет название товара.

Дополнительная функциональность переменных
Для каждой переменной вывода например {PAGE_TITLE} можно использовать дополнительные обработчики, для приведения переменной к нужному формату. Вызываются они так: {VARIABLE | function} или {VARIABLE | function("")} для случая если нужно передать какие-то параметры функции. Вот список возможных операций с переменными:
1) json или json_encode
Кодирует переменную в json формат
Пример использования для переменной "VARIABLE" со значением 'тест':
Код:
{VARIABLE | json}
{VARIABLE | json_encode}

Результат:
"\u0442\u0435\u0441\u0442"
"\u0442\u0435\u0441\u0442"


2) upper или strtoupper
Преобразует переменную к uppercase формату.
Пример использования для переменной "VARIABLE" со значением 'тест':
Код:
{VARIABLE | upper}
{VARIABLE | strtoupper}
Результат:
ТЕСТ
ТЕСТ


3) lower или strtolower
Преобразует переменную к lowercase формату.
Пример использования для переменной "VARIABLE" со значением 'TEST':
Код:
{VARIABLE | lower}
{VARIABLE | strtolower}
Результат:
test
test


4) length или strlen
Возвращает текстовую длину переменной
Пример использования для переменной "VARIABLE" со значением 'TEST':
Код:
{VARIABLE | length}
{VARIABLE | strlen}
Результат:
4
4


5) money или money_format
Форматирует цисло в строку валюты:
Пример использования для переменной "VARIABLE" со значением '1234.56' для локализации en_US
Код:
{VARIABLE | money}
{VARIABLE | money_format}
Результат:
USD 1,234.56
USD 1,234.56


6) stripslashes
удаляет слэши из переменной
Пример использования для переменной "VARIABLE" со значением 'текст \"тест\"'
Код:
{VARIABLE | stripslashes}
Результат:
текст "тест"

7) urlencode
Форматирует переменную в формат url и возвращает строку, в которой все не алфавитно-числовые символы (кроме -_.) заменены на знак процентов (%) с последующими двумя 16-ричными цифрами и пробелами, кодированными как знаки плюс (+).Она кодируется тем же способом, что и post данные WWW-формы
Пример использования для переменной "VARIABLE" со значением 'текст \"тест\"'
Код:
{VARIABLE | urlencode}
Результат:
%F2%E5%EA%F1%F2%20\%22%F2%E5%F1%F2\%22

8) urldecode
декодирует URL-закодированную строку.
Пример использования для переменной "VARIABLE" со значением '%F2%E5%EA%F1%F2%20\%22%F2%E5%F1%F2\%22'
Код:
{VARIABLE | urlencode}
Результат:
текст \"тест\"


9) addslashes
Добавляет слэши для переменной
Пример использования для переменной "VARIABLE" со значением 'текст "тест"'
Код:
{VARIABLE | addslashes}
Результат:
текст \"тест\"

10) nl2br
Заменяет все знаки переноса строки "\n" на "<br />"
Пример использования для переменной "VARIABLE" со значением "текст \n текст"
Код:
{VARIABLE | nl2br}
Результат:
текст <br /> текст


11) strip_tags
Удаляет теги из строки. Наличие параметра в скобках обязательно
Пример использования для переменной "VARIABLE" со значением "<b>текст</b> <br /> текст"
А) Код:
{VARIABLE | strip_tags("")}
Результат:
текст текст
Б) Код:
{VARIABLE | strip_tags("<b>")}
Результат:
текст <br /> текст


12) str_repeat
Возвращает повторяющуюся строку. Наличие параметра в скобках обязательно
Пример использования для переменной "VARIABLE" со значением "Текст"
А) Код:
{VARIABLE | str_repeat("2")}
Результат:
ТекстТекст
Б) Код:
{VARIABLE | str_repeat("4")}
Результат:
ТекстТекстТекстТекст

13) number или number_format
Форматирует число с разделением групп. Наличие 3х параметров в скобках обязательно. Работает аналогично функции php number_format. Использует 3 параметра: точность округления, разделитель целого числа с дробной его частью, разделитель тысяч.
Пример использования для переменной "VARIABLE" со значением "1234.56"
А) Код:
{VARIABLE | number_format("2",","," ")}
{VARIABLE | number_format("2",","," ")}
Результат:
1 234,56
1 234,56

Б) Код:
{VARIABLE | number_format("3",".",",")}
{VARIABLE | number_format("3",".",",")}
Результат:
1,234.560
1,234.560


14) date
Форматирует дату/время из unix timestamp. Наличие параметра в скобках обязательно
Пример использования для переменной "VARIABLE" со значением "1289575231"
Код:
{VARIABLE | date("d.m.Y H:i:s")}
Результат:
12.11.2010 15:20:31


15) is_divided
Делится ли переменная на число без остатка? Наличие 3х параметров в скобках обязательно. 1й параметр - число, на которое делим переменную, 2й параметр - результат в случае если переменная делится, 3й параметр - результат в случае если не делится
Пример использования для переменной "VARIABLE" со значением "5"
А) Код:
{VARIABLE | is_divided("5","</tr><tr>","")}
Результат:
</tr><tr>
Б) Код:
{VARIABLE | is_divided("4","</tr><tr>","")}
Результат:
Ничего не выведет


16) multiply
Умножить переменную на параметр указанный в скобках. Наличие параметра в скобках обязательно
Пример использования для переменной "VARIABLE" со значением "3"
Код:
{VARIABLE | multiply("4")}
Результат:
12

17) divide
Разделить переменную на параметр указанный в скобках. Наличие параметра в скобках обязательно
Пример использования для переменной "VARIABLE" со значением "12"
Код:
{VARIABLE | divide("3")}
Результат:
4

18) minus
Уменьшить переменную на параметр указанный в скобках. Наличие параметра в скобках обязательно
Пример использования для переменной "VARIABLE" со значением "12"
Код:
{VARIABLE | minus("3")}
Результат:
9

19) plus
Увеличить переменную на параметр указанный в скобках. Наличие параметра в скобках обязательно
Пример использования для переменной "VARIABLE" со значением "12"
Код:
{VARIABLE | plus("8")}
Результат:
20

20) gen_word_end
Дописать соответствующее окончание для слов, используется для отображения цифр с описанием. Наличие 3х параметров в скобках обязательно
Пример использования для переменной "VARIABLE" с различными занчениями "1", "2", "5", "11", "18", "21", "23" на примере количества товаров в категории
А) Значение "1".
Код:
{VARIABLE} товар{VARIABLE| gen_word_end("","а","ов")} в категории
Результат:
1 товар в категории
б) Значение "2".
Код:
{VARIABLE} товар{VARIABLE| gen_word_end("","а","ов")} в категории
Результат:
2 товара в категории
в) Значение "5".
Код:
{VARIABLE} товар{VARIABLE| gen_word_end("","а","ов")} в категории
Результат:
5 товаров в категории
г) Значение "11".
Код:
{VARIABLE} товар{VARIABLE| gen_word_end("","а","ов")} в категории
Результат:
11 товаров в категории
д) Значение "18".
Код:
{VARIABLE} товар{VARIABLE| gen_word_end("","а","ов")} в категории
Результат:
18 товаров в категории
е) Значение "21".
Код:
{VARIABLE} товар{VARIABLE| gen_word_end("","а","ов")} в категории
Результат:
21 товар в категории
ж) Значение "23".
Код:
{VARIABLE} товар{VARIABLE| gen_word_end("","а","ов")} в категории
Результат:
23 товара в категории

21) money или money_format
Форматирует число с разделением групп. Наличие 1го и 2го параметра в скобках не обязательно. Если он или они указаны, то первый параметр определяет тэг, в котором будет отображаться информация о цене. По умолчанию это "span". Второй параметр определяет количество знаков после запятой. По умолчанию берёт количество знаков и формат отображения из настроек на сайте (Вкладка "Настройки" -> "Валюты").

Пример использования для переменной "VARIABLE" со значением "1234.56"
Пример использования для переменной "VARIABLE2" со значением "11"
Код:
{VARIABLE | money}
{VARIABLE2 | money}
{VARIABLE2 | money("div")}
{VARIABLE2 | money("div", "5")}
Результат видимый пользователю:
  • 1234.56 рубля
  • 11.00 рублей
  • 11.00
    рублей

  • 11.00000 рублей
Результат в HTML коде:
  • <span title="1 234 российских рубля 56 копеек"><span class="num">1 234,56</span><span>рублей</span></span>
  • <spantitle="11,00 российских рублей"><spanclass="num">11,00</span> <span>рублей</span></span>
  • <div title="11,00 российских рублей"><div class="num">11,00</div> <div>рублей</div></div>
  • <div title="11,00000 российских рублей"><div class="num">11,00000</div><div>рублей</div></div>
22) htmlspecialchars_decode
Превращает код текстовых полей в HTML код
Пример использования для переменной "VARIABLE" со значением '&lt;a href=&quote;http://{NET_DOMAIN}/...ная&#60;/a&#62;'
Код:
{VARIABLE | htmlspecialchars_decode}
Результат:
<a href="http://{NET_DOMAIN}/...}/">Главная</a>

P.S. Будьте осторожны при использовании декодирования в HTML, т.к. если превращать в код те поля, которые может редактировать пользователь, то может возникнуть проблема с безопасностью связанная с XSS.
Для отсутствия подобных проблем используйте данную возможность только для полей которые редактирует лишь администратор и не использовать её для отображения полей редактируемых пользователем.

23) convenient_date
Эта функция, которая позволяет рисовать красивую дату на основе шаблона результирующей строки.
Например для шаблона 'd (n) Y H:i' функция будет выводить
из "2015-05-16 12:53:28" > "16 мая 2015 12:53"
из "2020-06-03 15:20:58" > "3 июня 15:20"
Если же от текущего момента прошло меньше суток, например сейчас "2020-06-27 18:31:13" а дата вывода "2020-06-27 15:18:02", то результатом будет > "3 часа назад".

Всего функция принимает 3 аргумента, 2 аргумента, 1 аргумент, либо без указания любых аргументов:
{VARIABLE_TIME | convenient_date("d (n) Y", "d (n)", "0")}
{VARIABLE_TIME | convenient_date("d (n) Y", "d (n)")}
{VARIABLE_TIME | convenient_date("d (n) Y")}
{VARIABLE_TIME | convenient_date}

Данные аргументов используются форматирования даты:https://www.php.net/...nction.date.php, а особый формат "(n)" - это красивое написание месяца на понятном человеку языке.

Первый аргумент используется для дат от 6 месяцев назад.
Второй аргумент используется для дат от текущего момента и до времени пол года назад.
Третий аргумент указывает нужно ли использовать особое форматирование дат для разницы во времени меньше 24 часов. Если значение равно 1, то будет включено форматирование для времени, которое было менее 24 часов назад. Формат вывода будет вот в таком виде:
17 часов назад
17 минут назад
17 секунд назад.

Если значение 3-го аргумента равно нулю, то дата будет выведена по формату дат от текущего момента до полугода назад, формат используется от второго аргумента.

Работает она так для сегодняшней даты 27.06.2020 17:00:00,форматирование данных за сутки выключено:
  {VARIABLE_TIME | convenient_date("d (n) Y", "d (n)", "0")}
результат для 18.06.2020: 18 июня
результат для 18.06.2019: 18 июня 2019
результат для 27.06.2020 : 27 июня

Для сегодняшней даты 27.06.2020 17:00:00, форматирование данных за сутки включено:
{VARIABLE_TIME | convenient_date("d (n) Y", "d (n)", "1")}
либо
{VARIABLE_TIME | convenient_date("d (n) Y", "d (n)")}

результат для 18.06.2020: 18 июня
результат для 18.06.2019: 18 июня 2019
результат для 27.06.2020 : 17 часов назад.

Если второй аргумент не указан, то он будет установлен такой же как первый аргумент:
{VARIABLE_TIME | convenient_date("d (n) Y")}
результат для 18.06.2020: 18 июня 2019
результат для 18.06.2019: 18 июня 2019
результат для 27.06.2020 : 17 часов назад.

Результат для отсутствия указания аргументов - будут указаны настройки дат по умолчанию, а именно ("d (n) Y", "d (n)") - для старых дат указывается год. Для новых дат год не указывается:
{VARIABLE_TIME | convenient_date)}
результат для 18.06.2020: 18 июня
результат для 18.06.2019: 18 июня 2019
результат для 27.06.2020 : 17 часов назад


Логические операции
Они бывают следующих видов:
1) условия:
   А) IF - условие используется для сравнения каких-либо данных. По умолчанию оно проверяет существование переменной и чтобы значение переменной было отлично от нуля. Так же сравнение может происходить с условиями
       >=      Значение должно быть больше или равно
       <=      Значение должно быть меньше или равно
       >       Значение должно быть больше
       <       Значение должно быть меньше
       =       Значение должно равняться
       !=      Значение не должно равняться
   Для условия IF обязательно наличие закрывающего тега {% ENDIF %}


   Примеры использования условия IF для переменной "VARIABLE" равной 1:

     А)  код:
            
{% IF VARIABLE %}Переменная указана{% ENDIF %}
          Результат:
             Переменная указана
     Б)  код:
            
{% IF VARIABLE=1 %}Переменная равна единице{% ENDIF %}
          Результат:
             Переменная равна единице
     В)  код:
            
{% IF VARIABLE!=2 %}Переменная не равна двум{% ENDIF %}
          Результат:
             Переменная не равна двум
     Г)  код:
            
{% IF VARIABLE>=1 %}Переменная больше или равна 1{% ENDIF %}
          Результат:
             Переменная больше или равна 1
     Д)  код:
            
{% IF VARIABLE>1 %}Переменная больше 1{% ENDIF %}
          Результат:
             Ничего не выведет
     Е)  код:
            
{% IF VARIABLE<1 %}Переменная меньше 1{% ENDIF %}
          Результат:
             Ничего не выведет

Примеры использования условия IF для переменной "VARIABLE" равной 0:

     А)  код:
            
{% IF VARIABLE %}Переменная указана{% ENDIF %}
          Результат:
             Ничего не выведет
     Б)  код:
            
{% IF VARIABLE=1 %}Переменная равна единице{% ENDIF %}
          Результат:
             Ничего не выведет
     В)  код:
            
{% IF VARIABLE==1 %}Переменная равна единице{% ENDIF %}
          Результат:
             Ничего не выведет
     Г)  код:
            
{% IF VARIABLE!=2 %}Переменная не равна двум{% ENDIF %}
          Результат:
             Переменная не равна двум
     Д)  код:
             [code]{% IF VARIABLE>=1 %}Переменная больше или равна 1{% ENDIF %}[/code]
          Результат:
             Ничего не выведет
     Е)  код:
             [code]{% IF VARIABLE>1 %}Переменная больше 1{% ENDIF %}[/code]
          Результат:
             Ничего не выведет
     Ж)  код:
             [code]{% IF VARIABLE<1 %}Переменная меньше 1{% ENDIF %}[/code]
          Результат:
             Переменная меньше 1

б) ELSEIF Другое условие, если не прошло предыдущее. Работает точно так же как и условие IF, используется для удобства записи.
     Пример использования для переменной "VARIABLE" равной 1
     А)  код:
             [code]
{% IF VARIABLE=2 %}
Переменная равна двум
{% ELSEIF VARIABLE=1 %}
Переменная равна единице
{% ENDIF %}[/code]
          Результат:
             Переменная равна единице
     Б)  код:
             [code]
{% IF VARIABLE>2 %}
Переменная больше двух
{% ELSEIF VARIABLE<1 %}
Переменная меньше единицы
{% ENDIF %}[/code]
          Результат:
             Ничего не выведет

   в) IFNOT Условие отрицания. Работает так же как и IF условие, с той лишь разницей что условие не должно выполниться
     Примеры использования для переменной "VARIABLE" равной 1
     А)  код:
             [code]
{% IFNOT VARIABLE=2 %}
Переменная не равняется двум
{% ENDIF %}[/code]
          Результат:
             Переменная не равняется двум
     Б)  код:
             [code]
{% IFNOT VARIABLE %}
Переменная не указана
{% ENDIF %}[/code]
          Результат:
             Ничего не выведет

   г) ELSE условие которое выполниться если предыдущие условия не выполнились.
     Пример использования для переменной "VARIABLE" равной 1
     А)  код:
             [code]
{% IF VARIABLE=2 %}
Переменная равна двум
{% ELSE %}
Переменная не равна двум
{% ENDIF %}[/code]
          Результат:
             Переменная не равна двум
     Б)  код:
[code]
{% IF VARIABLE>5 %}
Переменная больше двух
{% ELSEIF VARIABLE<-5 %}
Переменная меньше единицы
{% ELSE %}
Переменная находится в диапазоне от -5 до 5
{% ENDIF %}
[/code]
          Результат:
             Переменная находится в диапазоне от -5 до 5
   д) ENDIF закрывающий тег любых условий. Обязателен для нормальной работы условия.

   е) Использование нескольких условий в одном.
     Пример использования для переменной "VARIABLE1" равной 1 и VARIABLE2 равной 0
     А)  код:
             [code]
{% IF VARIABLE1=1 && VARIABLE2<1 %}
Переменная VARIABLE1 равна 1, а VARIABLE2 меньше единицы
{% ELSE %}
Переменная VARIABLE1 не равна 1 либо VARIABLE2 Больше нуля
{% ENDIF %}[/code]
          Результат:
             Переменная VARIABLE1 равна 1, а VARIABLE2 меньше единицы
     Б)  код:
             [code]
{% IF VARIABLE1 || VARIABLE2 %}
Одна из двух переменных указана
{% ELSEIF VARIABLE1<-5 && VARIABLE2=="тест" %}
Переменная VARIABLE1 меньше -5, а переменная VARIABLE2 равна тексту "тест"
{% ENDIF %}[/code]
          Результат:
             Одна из двух переменных указана
     В)  код:
             [code]
{% IF VARIABLE1 && VARIABLE2 < 1 && VARIABLE3 < 1 %}
Переменная VARIABLE1 указана, а VARIABLE2 и VARIABLE3 не указаны, либо их значение равно нулю
{% ELSE %}
Не выполнилось одно из условий, это означает что либо не указана VARIABLE1, либо указана и больше нуля VARIABLE2, либо указана и больше нуля VARIABLE3
{% ENDIF %}[/code]
          Результат:
             Переменная VARIABLE1 указана, а VARIABLE2 и VARIABLE3 не указаны, либо их значение равно нулю
     Г)  код:
             [code]
{% IFNOT VARIABLE1 && VARIABLE2 < 1 && VARIABLE3 < 1 %}
Переменная VARIABLE1 НЕ указана, а VARIABLE2 и VARIABLE3 не указаны, либо их значение равно нулю
{% ELSE %}
Не выполнилось одно из условий, это означает что либо УКАЗАНА VARIABLE1, либо указана и больше нуля VARIABLE2, либо указана и больше нуля VARIABLE3
{% ENDIF %}[/code]
          Результат:
             Не выполнилось одно из условий, это означает что либо УКАЗАНА VARIABLE1, либо указана и больше нуля VARIABLE2, либо указана и больше нуля VARIABLE3
     Д)  код:
             [code]
{% IFNOT VARIABLE1 %}
Переменная VARIABLE1 НЕ указана
{% ELSEIF VARIABLE2 < 1 && VARIABLE3 < 1 %}
VARIABLE1 указана. Выполнилось второе условие, т.к. VARIABLE2 и VARIABLE3 не указаны, либо их значение равно нулю
{% ELSE %}
Не выполнилось одно из условий, это означает что либо УКАЗАНА VARIABLE1, либо указана и больше нуля VARIABLE2, либо указана и больше нуля VARIABLE3
{% ENDIF %}[/code]
          Результат:
             VARIABLE1 указана. Выполнилось второе условие, т.к. VARIABLE2 и VARIABLE3 не указаны, либо их значение равно нулю

2) Циклы:
   А) Оператор FOR используется для массивов данных вида "data_array" мы в своей работе все переменные массивов стараемся называть в lowercase формате для удобства и лучшего понимания.
   Примеры использования для массива "data_array" со списком из 2х элементов в которых используются переменные "ID" и "NAME"
     1й элемент - "ID" = "1" , "NAME" "Название 1"
     2й элемент - "ID" = "2" , "NAME" "Название 2"

   Код:
     [code]{% FOR data_array %}
Идентификатор - {data_array.ID}
Название - {data_array.NAME}
<hr />
{% ENDFOR %}[/code]
   Результат:
     Идентификатор - 1
     Название - Название 1
     <hr />
     Идентификатор - 2
     Название - Название 2
     <hr />


   Для выдачи списка данных вложенного массива используется вызов вложенного массива, без указания родительского массива. Для переменных же используется полный путь!
   Например для массива  "data_array" есть вложенный массив "sub_data_array" в котором есть 2 элемента как в предыдущем примере ("ID" и "NAME")
     1й элемент - "ID" = "1" , "NAME" "Вложенное название 1"
     2й элемент - "ID" = "2" , "NAME" "Вложенное Название 2"

   Код:
     [code]{% FOR data_array %}
{% FOR sub_data_array %}
Идентификатор - {data_array.sub_data_array.ID}
Название - {data_array.sub_data_array.NAME}
<br />
{% ENDFOR %}
<hr />
{% ENDFOR %}[/code]
   Результат:
       Идентификатор - 1
       Название - Вложенное название 1
       <br />
       Идентификатор - 2
       Название - Вложенное название 2
       <br />
       <hr />


   б) ENDFOR закрывающий тег для циклов, если открыли цикл, не забывайте его закрывать, это фатально для работы шаблона.


   в) Дополнительная функциональность для массивов. Для любого массива кроме основных данных создаются дополнительные переменны, в lowercase формате для понимания, что они служебные. Вот список этих переменных:
      - length   количество элементов в массиве
      - index    номер текущей итерации
      - index0   номер текущей итерации (считая от нуля)
      - rindex   сколько элементов осталось
      - rindex0  сколько элементов осталось (считая от нуля)
      - first    является ли итерация первой?
      - last     является ли итерация последней?
    Пример использовния для массива "data_array" со списком из 2х элементов в которых используются переменные "ID" и "NAME" так же как в первом примере
    Код:
      [code]{% FOR data_array %}
количество элементов в массиве - {data_array.length}<br />
номер текущей итерации - {data_array.index}<br />
номер текущей итерации (считая от нуля) - {data_array.index0}<br />
сколько элементов осталось - {data_array.rindex}<br />
сколько элементов осталось (считая от нуля) - {data_array.rindex0}<br />
является ли итерация первой? - {data_array.first}<br />
является ли итерация последней? - {data_array.last}<br />
<hr />
{% ENDFOR %}[/code]
    Результат:
      количество элементов в массиве              - 2<br />
      номер текущей итерации                      - 1<br />
      номер текущей итерации (считая от нуля)     - 0<br />
      сколько элементов осталось                  - 1<br />
      сколько элементов осталось (считая от нуля) - 2<br />
      является ли итерация первой?                - 1<br />
      является ли итерация последней?             - 0<br />
      <hr />
      количество элементов в массиве              - 2<br />
      номер текущей итерации                      - 2<br />
      номер текущей итерации (считая от нуля)     - 1<br />
      сколько элементов осталось                  - 0<br />
      сколько элементов осталось (считая от нуля) - 1<br />
      является ли итерация первой?                - 0<br />
      является ли итерация последней?             - 1<br />
      <hr />



#147381 Добавлен Обратный Звонок

Отправлено support на 11 Июль 2014 - 22:20

Сегодня был добавлен функционал, позволяющий покупателям отправлять заявки на обратный звонок с вашего сайта через форму, которую можно разместить на любой странице вашего сайта. Такая форма позволяет клиенту быстро и просто делать заказы на вашем сайте, заполняя всего лишь 2 поля: Имя и телефон.
Не редко её переназывают, например в "Заказ в 1 клик" или "Быстрый заказ", но суть формы при этом не меняется, в ней всё также остаётся 2-3 поля.

Выглядит в жизни этот функционал таким не хитрым образом:
Форма в которую мы отправляем запрос
1.png

Так она выглядит в момент когда запрос отправлен:
2.png
Поддерживаются как ajax запросы с ответом на json, так и обычные POST запросы, в этом случае произойдёт редирект на ту страницу, откуда был сделан запрос, либо на ту, которая будет указана в переменной "return_to", например так:
<input type="hidden" name="return_to" value="/feedback" />

На почту сразу приходит письмо с информацией о поступлении обратного звонка:
3.jpg


Через несколько мгновений, если у нас включена галочка напротив пункта "уведомлять меня о новых заказах" в разделе "Настройки" > "SMS", мы увидим сообщение на телефон следующего содержания:
IMG_3439.jpg

Также сообщение отправляется в ICQ, если указан ваш номер и стоит галочка напротив пункта "Отправлять уведомления на icq по поступлению заказа" в разделе "Настройки" > "Основные".
Если у Вас стоит расширение для Google Chrome и Yandex Браузер для уведомления о новых заказах, уведомление придёт и туда.

В панели управления сразу создаётся пустой заказ, с заполненными данными из формы и открытыми для ввода полями, в которые потребуется добавить информацию от пользователя, позвонив ему по телефону:
4.jpg
Дополнительным удобством формы является то, что она настраивается так, как Вам удобно, можно добавлять поля, которые сразу заполнятся в карточке заказа, их соотношение с названиями переменных в HTML коде выглядит так:
  • Адрес доставки: form[callback_address]
  • Город: form[callback_city]
  • Область: form[callback_region]
  • Почтовый индекс: form[callback_zip_code]
  • Страна: form[callback_country]
  • Удобное время доставки. Дата: form[callback_convenient_date]
  • Удобное время доставки. С: form[callback_convenient_hour_from]
  • Удобное время доставки. По: form[callback_convenient_hour_to]
  • Email: form[callback_email]
  • Код купона на скидку: form[coupon_code]
А также можно добавлять свои произвольные поля, они будут дописаны в поле комментария, например так:
  • form[Этаж]
  • form[Подъезд]
  • form[Метро]
  • form[Удобное_время_для_звонка]
  • form[Callback_time]
  • form[Страница_товара]
  • form[Название_понравившегося_товара]
  • ...
Форма защищена от спам атак, различного характера, начиная от банальных проверок бот это или не бот на javascript-е и логике видимости блоков на странице в CSS и заканчивая лимитами на IP адреса отправителей, так что  ложных уведомлений от ботов ждать не стоит, не смотря на отсутствие ввода проверочных картинок (капч).

Приведу пару примеров формы, основанную на коде страницы обратной связи шаблона "Весна".
Простой базовый пример где есть всего 2 необходимых для ввода поля и комментарий, как на скриншоте выше:
<h1>Заказ обратного звонка</h1>
<form method="post" action="{CALLBACK_URL}" class="callbackForm" enctype="multipart/form-data">
	
	 <input type="hidden" name="hash" value="{HASH}" />
	 <!-- Набор полей которые не видит пользователь, но видят боты. Когда они их заполняют мы точно знаем, что их прислал нам бот и мы не сохраняем подобный отзыв о товаре, а боту отправившему отзыв сообщаем, что отзыв добавлен успешно, но будет отображён здесь после прохождения модерации -->
	 {ANTISPAM_CODE}
	 <table class="form">
		 <tr>
		 <td><label for="callback_person" class="required">Представьтесь пожалуйста<em>*</em></label></td>
		 <td><input id="callback_person" type="text" name="form[{ANTISPAM_FORM_FIELD_NAME_CALLBACK_PERSON}]" value="{FORM_CALLBACK_PERSON}" maxlength="50" class="required"/></td>
		 </tr>
		 <tr>
		 <td><label for="callback_phone" class="required">Телефон<em>*</em></label></td>
		 <td><input id="callback_phone" type="text" name="form[{ANTISPAM_FORM_FIELD_NAME_CALLBACK_PHONE}]" value="{FORM_CALLBACK_PHONE}" maxlength="255" class="required input-text"/></td>
		 </tr>
		 <tr>
		 <td><label for="callback_comment">Комментарий</label></td>
		 <td><textarea id="callback_comment" rows="7" name="form[{ANTISPAM_FORM_FIELD_NAME_CALLBACK_COMMENT}]" >{FORM_CALLBACK_COMMENT}</textarea></td>
		 </tr>
	 </table>
	 <div class="buttons">
	 <div class="left">
		 <p class="back-link"><a href="http://{NET_DOMAIN}/">Перейти на главную</a></p>
	 </div>
	 <div class="right">
		 {% IFNOT FORM_SEND_OK %}<button type="submit" title="Отправить" class="button">Отправить</button>{% ENDIF %}
	 </div>
	 </div>
</form>

Такая же форма, с дополнительными полями, которые проставляются в карточке заказа, а также с 1 произвольным полем:
<h1>Заказ обратного звонка</h1>
<form method="post" action="{CALLBACK_URL}" class="callbackForm" enctype="multipart/form-data">
<input type="hidden" name="hash" value="{HASH}" />
<!-- Набор полей которые не видит пользователь, но видят боты. Когда они их заполняют мы точно знаем, что их прислал нам бот и мы не сохраняем подобный отзыв о товаре, а боту отправившему отзыв сообщаем, что отзыв добавлен успешно, но будет отображён здесь после прохождения модерации -->
{ANTISPAM_CODE}
<table class="form">
<tr>
	 <td><label for="callback_person" class="required">Представьтесь пожалуйста<em>*</em></label></td>
	 <td><input id="callback_person" type="text" name="form[{ANTISPAM_FORM_FIELD_NAME_CALLBACK_PERSON}]" value="{FORM_CALLBACK_PERSON}" maxlength="50" class="required"/></td>
</tr>
<tr>
	 <td><label for="callback_phone" class="required">Телефон<em>*</em></label></td>
	 <td><input id="callback_phone" type="text" name="form[{ANTISPAM_FORM_FIELD_NAME_CALLBACK_PHONE}]" value="{FORM_CALLBACK_PHONE}" maxlength="255" class="required input-text"/></td>
</tr>
<tr>
	 <td><label for="callback_comment">Комментарий</label></td>
	 <td><textarea id="callback_comment" rows="7" name="form[{ANTISPAM_FORM_FIELD_NAME_CALLBACK_COMMENT}]" >{FORM_CALLBACK_COMMENT}</textarea></td>
</tr>
<tr>
	 <td><label for="callback_region">Область</label></td>
	 <td><input id="callback_region" type="text" name="form[callback_region]" value="{FORM_CALLBACK_REGION}" maxlength="255" class="input-text"/></td>
</tr>
<tr>
	 <td><label for="callback_address">Адрес</label></td>
	 <td><input id="callback_address" type="text" name="form[callback_address]" value="{FORM_CALLBACK_ADDRESS}" maxlength="255" class="input-text"/></td>
</tr>
<tr>
	 <td><label for="callback_city">Город</label></td>
	 <td><input id="callback_city" type="text" name="form[callback_city]" value="{FORM_CALLBACK_CITY}" maxlength="255" class="input-text"/></td>
</tr>
<tr>
	 <td><label for="callback_zip_code">Почтовый индекс</label></td>
	 <td><input id="callback_zip_code" type="text" name="form[callback_zip_code]" value="{FORM_CALLBACK_ZIP_CODE}" maxlength="255" class="input-text"/></td>
</tr>
<tr>
	 <td><label for="callback_country">Страна</label></td>
	 <td><input id="callback_country" type="text" name="form[callback_country]" value="{FORM_callback_country}" maxlength="255" class="input-text"/></td>
</tr>
<tr>
	 <td><label for="callback_convenient_date">Удобная дата доставки dd.mm.yyyy</label></td>
	 <td><input id="callback_convenient_date" type="text" name="form[callback_convenient_date]" value="{FORM_CALLBACK_CONVENIENT_DATE}" maxlength="255" class="input-text"/></td>
</tr>
<tr>
	 <td><label for="callback_convenient_hour_from">Удобное время доставки</label></td>
	 <td>
	 С: <input id="callback_convenient_hour_from" type="text" name="form[callback_convenient_hour_from]" value="{FORM_CALLBACK_CONVENIENT_HOUR_FROM}" maxlength="255" class="input-text"/>
	 По: <input id="callback_convenient_hour_to" type="text" name="form[callback_convenient_hour_to]" value="{FORM_CALLBACK_CONVENIENT_HOUR_TO}" maxlength="255" class="input-text"/>
	 </td>
</tr>
<tr>
	 <td><label for="callback_email">Email</label></td>
	 <td><input id="callback_email" type="text" name="form[callback_email]" value="{FORM_CALLBACK_EMAIL}" maxlength="255" class="input-text"/></td>
</tr>
<tr>
	 <td><label for="coupon_code">Код купона на скидку</label></td>
	 <td><input id="coupon_code" type="text" name="form[coupon_code]" value="{FORM_COUPON_CODE}" maxlength="255" class="input-text"/></td>
</tr>
<tr>
	 <td><label for="callback_floor">Этаж</label></td>
	 <td><input id="callback_floor" type="text" name="form[этаж]" value="{FORM_ЭТАЖ}" maxlength="255" class="input-text"/></td>
</tr>
</table>
<div class="buttons">
<div class="left">
	 <p class="back-link"><a href="http://{NET_DOMAIN}/">Перейти на главную</a></p>
</div>
<div class="right">
	 {% IFNOT FORM_SEND_OK %}<button type="submit" title="Отправить" class="button">Отправить</button>{% ENDIF %}
</div>
</div>
</form>

Данные об источнике прихода покупателя, все UTM метки по рекламе, также как и в обычном заказе собираются в карточку заказа, для удобства ведения аналитики продаж.

Запросы для отправки формы можно также отправлять через ajax запросы, чтобы у пользователя не скролился экран, например если форма находится в середине страницы, а он смотрел интересный для него товар, в этом случае к запросам следует добавить специальный параметр ajax_q=1 через GET или POST и результат обработки запроса вернётся в JSON формате, например так:
{"status":"ok","message":"Всё прошло хорошо"}
или так:
{"status":"error","message":"Не удалось выполнить действие, потому что сервер заболел..."}
В поле message будет текст результата выполнения операции.

Для случаев, когда требуется разместить форму заказа обратного звонка на отдельной странице, например, в случаях, когда на странице расположена только ссылка или кнопка "Заказать обратный звонок", а сама форма будет загружаться через ajax запрос на адрес
http://вашсайт.ру/callback
Или когда есть желание отправить пользователя на отдельную страницу, как на форму обратной связи, например если Вы продаёте услугу и Вам нужен простой конструктор заявок с сайта, то в этом случае можно закачать файл callback.htm в редактор шаблонов. Вот пример такого файла для шаблона "Весна":
Прикрепленный файл  callback.zip   1,54К   874 Количество загрузок:
Просто распаковываем и закачиваем в раздел "Сайт" > "Редактор шаблонов". После закачки он появится в блоке "Шаблоны" с названием "Обратный звонок".

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


#146107 Изменение Опции "Товар Есть В Наличии" На "Товар Под Заказ"

Отправлено Сake на 04 Июль 2014 - 05:09

Вам по идее необходимо заменить ваш код на следующий

<!-- Доступность товара -->
<div class="goodsDataMainModificationAvailable">
  <div rel="true" class="available-true" {% IF GOODS_MOD_REST_VALUE = 0 || GOODS_MOD_REST_VALUE >= 10 %}style="display:none;"{% ENDIF %}>В наличии</div>
  <div rel="false" class="available-false" {% IF GOODS_MOD_REST_VALUE > 0 %}style="display:none;"{% ENDIF %}>Размера нет в наличии</div>
  <div rel="false" class="available-false2" {% IF GOODS_MOD_REST_VALUE < 10 %}style="display:none;"{% ENDIF %}>Товар под заказ</div>
</div>

а в файле main.js найти код

// Есть ли товар есть в наличии
		 if(modificationRestValue>0) {
		   goodsAvailableTrue.show();
		   goodsAvailableFalse.hide();
		 // Если товара нет в наличии
		 } else {
		   goodsAvailableTrue.hide();
		   goodsAvailableFalse.show();
		 }

и заменить его на

// Есть ли товар есть в наличии
if(modificationRestValue > 0 && modificationRestValue < 10) {
   goodsAvailableTrue.show();
   goodsAvailableFalse.hide();
   $('.available-false2').hide();
// Если товара нет в наличии
} else if(modificationRestValue >= 10) {
   goodsAvailableTrue.hide();
   goodsAvailableFalse.hide();
   $('.available-false2').show();
} else {
   goodsAvailableTrue.hide();
   goodsAvailableFalse.show();
   $('.available-false2').hide();
}



#145658 Поменять Местам Характеристики И Описание

Отправлено Vaccina на 02 Июль 2014 - 01:18

В каталоге попробуйте вставить ссылку сл. вида:
<a href="{goods.URL | url_amp}?&amp;form%5Bgoods_id%5D=opinion#goodsDataOpinionAdd">Отзывы</a>



#145660 Странная Ссылка

Отправлено Сake на 02 Июль 2014 - 04:40

Цитата

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

Это технический сайт. В данном случае выполняющий перенаправление на ваш домен. Если в качестве url задать адрес сайта, то выполнится перенаправление на него. Например

yushkev*.su/redirect.php?url=http://texst*.ru/

Адрес по всей видимости был отслежен метрикой.

Цитата

а еще у меня 1500 страниц идет дублеров  товара это как понимать и как удалить?   goods_view_type=2
  прямая ссылка ведет на товар но при том товар расположен не таблицей а списком

Данные страницы должны располагаться в каталоге и служат для изменения стиля отображения товара. Если вы хотите удалить из индексации подобные ссылки, то вам необходимо в шаблоне "Товары" найти блок переключения или ссылку и задать ей тег <noindex> или rel="nofollow" соответственно для блока и для ссылки.


#145070 Подскажите , Плиз

Отправлено support 2.0 на 27 Июнь 2014 - 02:36

Просмотр сообщенияtheone (26 Июнь 2014 - 11:40) писал:

получилось
ещё вот такую ошибку заметил, когда кликаешь на товар, открывает карточка товара. Если нет полного описания товара, то по умолчанию открывается закладка характеристики. Характеристики в ней почему то не отображаются, хотя они внесены.
Данной ошибки изначально в данном шаблоне не было, но видимо после внесения некоторых изменений была загружена версия с ошибкой такого рода. Пополнили баланс Вам на 500 рублей за нахождение ошибки. Заключается она в том, что всегда открывается при загрузке товара страница с tab_1, соответственно, если описания нет, то вкладка не отобразится, но и текст на других вкладках должен быть скрыт, если в ссылке стоит tab_1.  Вам эту ошибку мы в шаблоне уже исправили.

Для тех, у кого установлен данный шаблон с этой ошибкой, исправить можно так: найдите в шаблоне Товар
id="tab_1" class="selected"
замените на
id="tab_1" class="active"

далее в этом же шаблоне найдите
<!-- END С этим товаром смотрят -->

</div>
замените на
<!-- END С этим товаром смотрят -->

и после найдите
<!-- END Если в тарифном плане подключен модуль отзывов о товаре -->
</div>
</div>
замените на
<!-- END Если в тарифном плане подключен модуль отзывов о товаре -->
</div>
</div>
</div>

теперь в файле main.css найдите
.idTabs a.selected
замените на
.idTabs a.active

теперь в файле main.js найдите
// Инициализация табов на странице товара
function initTabs() {
// Блок в котором находятся табы
var tabBlock = $('#more_info_block');
if(!tabBlock.length) {
return false;
}
// По умолчанию делаем отметку о том что активного таба не найдено
var isFind = 0;
tabBlock.find('.idTabs li > a').each(function(i){
// Если нашёлся активный там
if($(this).hasClass('selected')) {
	 // Инициализируем найденный таб
	 $(this).click();
	 // Ставим отметку, о том что не нужно инициализировать первый таб на странице
	 isFind = 1;
}
});
// Если не найдено ни одного таба с отметкой о том что он активен
if(!isFind) {
// Ставим активным первый таб на странице.
tabSwitch(1);
}
// Проверяет хэш и если по нему была открыта вкладка, то эта функция автоматически откроет её.
checkTabHash();
// Биндим изменение хэша - проверка какой FAQ вопрос нужно открыть.
$(window).bind('hashchange', function() { checkTabHash(); });
}
// Проверяет хэш, переданый пользователем и открывает соответствующий раздел
function checkTabHash() {
// Определяем текущий хэш страницы
var hash = window.location.hash.substr(1);
if(hash == 'goodsDataOpinionAdd') {
// $('#goodsDataOpinionAddBlock').show('blind');
return false;
}
if(!hash.length || hash.indexOf('show_tab_') == -1) {
return false;
}
// Открываем тот таб, который был указан в hash-е
tabSwitch(hash.replace("show_tab_", ''))
}
// Выбор вкладки на странице товара
function tabSwitch(nb) {
var tabBlock = $('#more_info_block');
tabBlock.find('.idTabs li > a').removeClass('selected');
tabBlock.find('div.content').hide();
$('#tab_' + nb).addClass('selected');
$('#idTab' + nb).show();
// Записываем в хэш информацию о том какой таб сейчас открыт, для возможности скопировать и передать ссылку с открытым нужным табом
document.location.hash = "#show_tab_" + nb;
}
// Инициализируем табы на странице
$(function() { initTabs(); });
замените на
// Инициализация табов на странице товара
function initTabs() {
  // Блок в котором находятся табы
  var tabBlock = $('#more_info_block');
  if(!tabBlock.length) {
	return false;
  }
  // По умолчанию делаем отметку о том что активного таба не найдено
  var isFind = 0;
 
  // Проверяет хэш и если по нему была открыта вкладка, то эта функция автоматически откроет её.
  checkTabHash();
 
  var activeTab = tabBlock.find('.idTabs li a.active');
  if(!activeTab.length) {
	// Ставим активным первый таб на странице.
	tabSwitchCore($('.idTabs li a:first').attr('id').replace('tab_', ''));
  } 
 
  // Если текущий адрес страницы предполагает добавление отзыва
  if('#goodsDataOpinionAdd' == document.location.hash) {
	$('#goodsDataOpinionAddBlock').show();
  }
  // Биндим изменение хэша - проверка какой таб нужно открыть.
  $(window).bind('hashchange', function() { checkTabHash(); });
}
// Проверяет хэш, переданый пользователем и открывает соответствующий раздел
function checkTabHash() {
  // Определяем текущий хэш страницы
  var hash = window.location.hash.substr(1);

  if(hash == 'goodsDataOpinionAdd') {
	hash = 'show_tab_4';
  }
  if(!hash.length || hash.indexOf('show_tab_') == -1) {
	return false;
  }
  // Открываем тот таб, который был указан в hash-е
  tabSwitch(hash.replace("show_tab_", ''))
}
// Выбор вкладки на странице товара
function tabSwitch(nb) {
  tabSwitchCore(nb);
  if('#goodsDataOpinionAdd' != document.location.hash || 4 != nb ) {
	// Записываем в хэш информацию о том какой таб сейчас открыт, для возможности скопировать и передать ссылку с открытым нужным табом
	document.location.hash = "#show_tab_" + nb; 
  }
}
// Выбор вкладки на странице товара без изменения хэша
function tabSwitchCore(nb) {
  var tabBlock = $('#more_info_block');
  tabBlock.find('.idTabs li a').removeClass('active');
  tabBlock.find('div.content').hide();
  $('#tab_' + nb).addClass('active');
  $('#idTab' + nb).show();
}
// Инициализируем табы на странице
$(function() { initTabs(); });

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


#136628 Обратный Звонок

Отправлено Castiel на 03 Май 2014 - 16:15

Просмотр сообщенияАлекс777 (30 Апрель 2014 - 19:20) писал:

SL-280981
Доброго времени суток,уважаемые модераторы!С наступающими майскими!)

Добавил на сайт форму Заказать звонок с всплывающим окошком ,сделал все по алгоритму выше,не уверен,конечно,что все далеко правильно,но таки работает)
Хотелось бы получить,при возможности, помощь по следующим вопросам:

1.Как правильно в robots.txt закрыть страницу "заказать звонок" от индексации ...

2.Как сделать,что бы положение окошка формы "Заказать звонок" не было зафиксированным на открытой странице,а перемещалось вместе с прокруткой  вниз/вверх.Как убрать надпись Title?

3.В какое место в шаблоне HTML или CSS? вставить код ссылки  <a class="zvonoc" href="#">Заказать звонок </a>,что б ссылка была вместо "Связаться с нами" рядом с поиском по магазину + добавить фоновую картинку (оформить кнопку)


Изображение


Прошу прощения за "много вопросов сразу"))...Спасибо заренее за ликбез!


Здравствуйте,

1. Заходим в раздел Сайт - Robot.txt
Добавляем данный параметр
Disallow: /page/Zakazat-zvonok

Устанавливаем обратный звонок при нажатии на иконку телефона
Редактируем шаблон HTML
Находим
<script type="text/javascript">// <![CDATA[
$(document).ready(function(){
$(".zvonoc").click(function() {
new Messi('<center><form action="http://main-ip.ru/mail.php" method="post"><input type="hidden" name="zagol_soob" value="" /><div style="width: 100%; text-align: left; border: 1px solid #CCCCCC; border-radius: 8px; font: 12px tahoma, verdana; background: #F5F5F5;"><div style="text-align: center; background: #389EB9; border-radius: 8px 8px 0px 0px; color: #ffffff; padding: 5px 5px 5px 5px;">ОБРАТНАЯ СВЯЗЬ</div><div style="padding: 8px 20px 0px 20px;">Номер телефона</div><div style="padding: 1px 20px 0px 20px;"><input style="width: 358px; height: 20px; background: #FFFFFF; border: 1px solid #CCCCCC; color: #191970; border-radius: 5px;" type="text" name="pole_1a" maxlength="900" /><input type="hidden" name="pole_1b" value="Номер телефона" /></div><div style="padding: 8px 20px 0px 20px;">Комментарий</div><div style="padding: 1px 20px 0px 20px;"><textarea style="width: 358px; height: 100px; background: #FFFFFF; border: 1px solid #CCCCCC; color: #191970; border-radius: 5px;" name="text"> </textarea></div><div style="overflow: auto; width: 100%; margin-top: 10px;"><div style="float: left; padding: 10px 0px 10px 20px; margin-right: 20px;">Число на картинке<br /> <input style="width: 220px; height: 20px; background: #FFFFFF; border: 1px solid #CCCCCC; color: #191970; border-radius: 5px;" type="text" name="captcha" maxlength="12" /></div><div style="padding: 10px 20px 10px 0px;"><a href="http://main-ip.ru/"><img src="http://main-ip.ru/captcha.php" alt="" border="0" /></a></div></div><div style="padding: 5px 20px 15px 20px; text-align: right; width: 358px;"><input class="blgreen" style="cursor: pointer; width: 200px;" type="submit" value="Отправить" /></div></div></form></center>',{title: 'Title', titleClass: 'info', buttons: [{id: 0, label: 'Close', val: 'X'}]} );
return false;
}
);
});
// ]]></script>

Заменяем на
<script>
	  $(document).ready(function() {
  $(".callme").fancybox({
   maxWidth : 800,
  maxHeight : 600,
  fitToView : false,
  width  : '70%',
  height  : '70%',
  autoSize : false,
  closeClick : false,
  openEffect : 'none',
  closeEffect : 'none'
});
});
	</script>

Далее находим
<span class="sup_phone"></span>
Заменяем на
<a class="callme fancybox.ajax" href="http://{NET_DOMAIN}/page/Zakazat-zvonok?only_body=1"><span class="sup_phone"></span></a>



#132803 Отзывы На Первой Странице

Отправлено Castiel на 10 Апрель 2014 - 15:48

Просмотр сообщенияИльсур (10 Апрель 2014 - 14:30) писал:

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

Исправили ошибки на вашем сайте.


Для вывода отзывов на главной странице код должно быть таким:

В самом конце файла main.js
$(function() {
var url = 'http://5toptovarov.ru/goods/tovar?only_body=1';
var id = '#insert-goods-opinion-list'; // Из примера это insert-goods-opinion-list
var injid = '#inject-goods-opinion-list'; // Из примера это inject-goods-opinion-list
if(id && injid && $(id).length) {
$.get(url, function(html) {
$(id).html(filterOpinionHTML($(html).find(injid).html()));
});
}
});
function filterOpinionHTML(html) {
var good = $('<div>').addClass('contentTbodyNewsBlock');
$(html).find('.good').each(function(index) {
if(index > 5) return;
$(good).append($('<div>').addClass('contentTbodyNewsBlockItem')
.append($('<span>').addClass('contentTbodyNewsBlockItemTitle').css('font-weight', 'bold')
.html($(this).find('.goodsDataOpinionListTableClient').html()))
.append($('<div>').addClass('newsListBlockItemPreview')
.html($(this).find('.ceil2').html()))
.append($('<em>').addClass('contentTbodyNewsBlockItemTime')
.html($(this).find('.goodsDataOpinionListTableDate').html()))
);
});
return($('<div>').addClass('contentTbodyNews').append(good));
}

В шаблоне HTML
<h2 class="contentTbodyCatalogHeader"><a href="http://5toptovarov.ru/goods/tovar">Последние отзывы</a></h2>
<div id="insert-goods-opinion-list"></div>



#131965 Переменные Для Простых Пользователей!

Отправлено tega4 на 06 Апрель 2014 - 22:27

HTML-шаблон

{SETTINGS_STORE_WORK_TIME} – время работы магазина
{SETTINGS_STORE_ICQ} – номер ICQ магазина
{SETTINGS_STORE_SKYPE} – скайп магазина
{SETTINGS_STORE_PHONE_COUNTRY_CODE1} {% IF SETTINGS_STORE_PHONE_CITY_CODE1 %}({SETTINGS_STORE_PHONE_CITY_CODE1}){% ENDIF %} {SETTINGS_STORE_PHONE_NUMBER1} – первый номер телефона
{SETTINGS_STORE_PHONE_COUNTRY_CODE2} {% IF SETTINGS_STORE_PHONE_CITY_CODE2 %}({SETTINGS_STORE_PHONE_CITY_CODE2}){% ENDIF %} {SETTINGS_STORE_PHONE_NUMBER2} – второй номер телефона
{SETTINGS_STORE_PHONE_COUNTRY_CODE3} {% IF SETTINGS_STORE_PHONE_CITY_CODE3 %}({SETTINGS_STORE_PHONE_CITY_CODE3}){% ENDIF %} {SETTINGS_STORE_PHONE_NUMBER3} – третий номер телефона

{CART_URL} – ссылка на корзину
{CURRENCY_NAME} – валюта заказа
{cart_sum.NOW | money_format} – сумма заказа

<li><a href="{menu.header.links.URL}" {% IF menu.header.links.SELECTED %}class="selected"{%ENDIF%} {% IF menu.header.links.TITLE %}title="{menu.header.links.TITLE}"{% ENDIF %}>{menu.header.links.NAME}</a></li>– верхнее меню



{CATALOG_URL} – ссылка на полный список каталога товаров
{catalog.URL} – ссылка на категорию/подкатегорию
{catalog.NAME} – отображает название категории/подкатегории

НОВИНКИ
{CATALOG_NEW_URL} – ссылка на категорию новинок
{index_page_new_goods.URL} –ссылка на товар в новинках
{index_page_new_goods.IMAGE_OTHER} – картинка товара в новинках
{index_page_new_goods.NAME} – название товара в новинках
{index_page_new_goods.URL_MIN_PRICE_NOW} – ссылка действующей цены товара в новинках
{ index_page_new_goods.MIN_PRICE_NOW | money_format} – действующая цена товара в новинках
{index_page_new_goods.URL_MIN_PRICE_NOW_WITHOUT_DISCOUNT}- ссылка цена без скидки
{index_page_new_goods.MIN_PRICE_NOW_WITHOUT_DISCOUNT | money_format} –цена товара без скидки
{index_page_new_goods.URL_MIN_PRICE_OLD} – ссылка старая цена
{index_page_new_goods.MIN_PRICE_OLD | money_format} – старая цена товара

ХИТЫ ПРОДАЖ
{CATALOG_TOP_SALES_URL}-ссылка на категорию хитов
{index_page_favorites_goods.URL} – ссылка на товар
{index_page_favorites_goods.IMAGE_OTHER} – картинка товара
{index_page_favorites_goods.NAME} – название товара
{index_page_favorites _goods.URL_MIN_PRICE_NOW} – ссылка действующей цены товара { index_page_favorites _goods.MIN_PRICE_NOW | money_format} – действующая цена товара
{index_page_favorites _goods.URL_MIN_PRICE_NOW_WITHOUT_DISCOUNT}- ссылка цена без скидки
{index_page_favorites _goods.MIN_PRICE_NOW_WITHOUT_DISCOUNT | money_format} –цена товара без скидки
{index_page_favorites _goods.URL_MIN_PRICE_OLD} – ссылка старая цена
{index_page_favorites _goods.MIN_PRICE_OLD | money_format} – старая цена товара

ИНТЕРЕСНЫЕ ПРЕДЛОЖЕНИЯ
{index_page_goods.URL} – ссылка на товар
{index_page _goods.IMAGE_OTHER} – картинка товара
{index_page _goods.NAME} – название товара
{index_page _goods.URL_MIN_PRICE_NOW} – ссылка действующей цены товара
{ index_page _goods.MIN_PRICE_NOW | money_format} – действующая цена товара
{index_page _goods.URL_MIN_PRICE_NOW_WITHOUT_DISCOUNT}- ссылка цена без скидки
{index_page _goods.MIN_PRICE_NOW_WITHOUT_DISCOUNT | money_format} –цена товара без скидки
{index_page _goods.URL_MIN_PRICE_OLD} – ссылка старая цена
{index_page _goods.MIN_PRICE_OLD | money_format} – старая цена товара

ПОДВАЛ
{DATE_YEAR} –год в копирайте
{SETTINGS_STORE_NAME} – название магазина в копирайте
{SETTINGS_STORE_ORG_NAME} – Юридическое название компании (ООО;ОАО;ИП)
{COPYRIGHT_FOR_DESIGN_SHINE} {SETTINGS_STORE_REGION} – копирайт Стореленда.

НОВОСТИ
{NEWS_SHOP_URL} – ссылка на список новостей
{news_list_shop.URL} – ссылка на новость
{news_list_shop.TITLE} – название новости

СТАТЬИ
{NEWS_ARTICLES_URL} – ссылка на список статей
{news_list_articles.URL} – ссылка на статью
{news_list_articles.TITLE} – название статьи

СРАВНЕНИЕ
{COMPARE_URL} –ссылка на сравнение товаров
{COMPARE_GOODS_COUNT} – кол-во товаров на сравнении

ПРОСМОТРЕННЫЕ ТОВАРЫ
{recently_viewed_goods.URL}-ссылка на просмотренный товар
{recently_viewed_goods.IMAGE_SMALL} –картинка просмотренного товара
{recently_viewed_goods.NAME} – название просмотренного товара
{recently_viewed_goods.URL_MIN_PRICE_NOW} – ссылка действующей цены товара
{recently_viewed_goods.MIN_PRICE_NOW | money_format} – сама действующая ссылка на товар


#131065 Кнопки

Отправлено Castiel на 03 Апрель 2014 - 06:08

Просмотр сообщенияbergamota (02 Апрель 2014 - 19:51) писал:

Понятно. Не знала, что на каждый домен заводится свой номер аккаунта. Разве шаблон Весна не одинаков для всех? Не обязательно ж смотреть именно через мой аккаунт (SL-279722 - здесь весна).

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

Создание кнопки "Уведомить меня" для шаблона "Весна".


В шаблоне "Товар"
Находим:
<input type="button" value="Купить" id="button-cart" class="button button_cart_product" onclick="quickorder('.goodsDataForm'); return false;" title="Положить &laquo;{GOODS_NAME}&raquo; в корзину"/>

Заменяем на:
<a id="button-cart" class="button button_cart_product submit" onclick="if($(this).text() == 'Уведомить меня') { document.location = '/feedback/?form[feedback_message]=Могли бы Вы уведомить меня о наличии товара &laquo;{GOODS_NAME}&raquo;?' } else { quickorder('.goodsDataForm'); return false; } return false;" title="Положить &laquo;{GOODS_NAME}&raquo; в корзину"/ href="#">{% IF GOODS_MOD_REST_VALUE>0 %}В корзину{% ELSE %}Уведомить меня{% ENDIF %}</a>


В файле "main.css".
Найти:
a.button {display: inline-block;text-decoration: none;padding:10px;}

Заменить:
a.button {display: inline-block;text-decoration: none;padding: 10px;background: #ff0551;line-height: 16px;}


В файле "main.js".
Найти:
// Есть ли товар есть в наличии
if(modificationRestValue>0) {
goodsAvailableTrue.show();
goodsAvailableFalse.hide();
// Если товара нет в наличии
} else {
goodsAvailableTrue.hide();
goodsAvailableFalse.show();
}

Заменить:
// Есть ли товар есть в наличии
if(modificationRestValue>0) {
goodsAvailableTrue.show();
goodsAvailableFalse.hide();
$('#button-cart').html('В корзину');
// Если товара нет в наличии
} else {
goodsAvailableTrue.hide();
goodsAvailableFalse.show();
$('#button-cart').html('Уведомить меня');
}



#129519 Изменения Фона

Отправлено Alexey11 на 26 Март 2014 - 19:51

Просмотр сообщениязлая я))) (26 Март 2014 - 18:36) писал:

большое спасибо, часть вопросов решена, подскажите еще пару моментов, огромное спасибо!Ваша помощь неоценима!
1 сделать отображение товаров только списком
2 переместить описание категории товаров вниз

Подскажу, как быстро найти класс, в котором нужно производить изменения.
Расскажу на вашем сайте с примерами. Пользуемся браузером Google Chrome.

Для начала заходим на сайт, смотрим то, что хотим изменить. Например надпись "Связаться с нами"
Для этого щелкаем правой кнопкой мыши прямо по фразе "Связаться с нами",
Жмем в выпадающем списке "Просмотр кода элемента":
Скрытый текст
У вас появляется код вашего сайта (слева широкая колонка) и стили вашего сайта (справа узкая колонка):

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

В данном случае слова находяться в блоке <h4> </h4> и имеют класс указаный справа:


Скрытый текст

Вам нужно добавить параметр color:#FFF; , посмотреть как он будет выглядеть. Сделать это можно прямо в браузере изменяя стили соответствующего класса.:

Скрытый текст

После того как подобрали нужный цвет копируем его название, далее заходим в бэк-офис, открываем шаблон main.css , быстрым поиском ищем нужный стиль и меняем его.(На вашем сайте я уже изменил код)

Скрытый текст

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

Есть 3 варианта установки фона.
Простое указание цвета: background:#000; , где #000 - нужный вам цвет.
Указание картинки(при загрузке сайта, пока картинка не загрузилась фон по умолчанию белый): Background:url('Ссылка на нужное изображение') no-repeat;
Где url - ссылка на изображение , no-repeat - картинка поставится только 1 раз(делается для больших изображений, чтобы они не дублировались) , нужно указывать вместо "no-repeat" - "repeat" если вы используете паттерн(маленькое изображение, которое нужно растеражировать по всей области).
Указание картинки и цвета пока картинка загружается  Background:url('Ссылка на нужное изображение') #000 no-repeat; Где все тоже самое , что и в двух предыдущих случаях.

Продемонстрирую на подвале как найти нужный класс, и что в нем изменить , чтобы серый заменить на шоколадный:
Кликаем правой кнопкой прямо по подвалу в любое пустое место, жмем просмотр кода элемента:
Скрытый текст
Далее смотрим сразу в стили, видим что там уже прописан параметр background и видим имя класса, остается дело за малым(Изменить значение параметра background на нужное вам)
Скрытый текст

После этого копируем имя класса , быстрым поиском ищем в main.css нужный нам блок и вносим в него изменения.(вам я их уже внес)

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


#129539 Как Изменить Логотип Для Всех Шаблонов

Отправлено Alexey11 на 26 Март 2014 - 21:06

1.Шаблон Лайт
Скрытый текст

2.Шаблон Мокко
Скрытый текст

3.Шаблон Сияние
Скрытый текст


4.Шаблон Пластик
Скрытый текст

5.Шаблон Техника

Скрытый текст

6.Шаблон Вечность

Скрытый текст

7.Шаблон Радость

Скрытый текст


8.Шаблон Осень
Скрытый текст
9.Шаблон Весна
Скрытый текст



#127494 Установка Ввода Мейла Обязательным Пунктом И Перенос Кнопки Оплаты

Отправлено Stasya на 17 Март 2014 - 22:36

Просмотр сообщенияНикита (17 Март 2014 - 13:05) писал:

))) а не получится, в таком случае, что при наборе skype будет выдаваться ошибка неправильного ввода e-mail, т.к. в скайпе нет "@", если такой ошибки не будет, то давайте сделаем так:
поле e-mail сделаем не обязательным и назовём его skype
а телефон - назовём e-mail
такое возможно?

Чтобы сделать телефон не обязательным полем для заполнения в шаблоне Оформление заказа найдите блок
<script>
$(document).ready(function(){
$("body").addClass("full-width basket checkout");
$("body").removeClass("home");
});
</script>
и замените его на
<script>
$(document).ready(function(){
$("body").addClass("full-width basket checkout");
$("body").removeClass("home");
if ($('#sites_client_phone').length && $('#sites_client_phone').val() == 'Отсутствует')
  $('#sites_client_phone').val('');
});
</script>
Затем найдите блок
<form
	  {% IF ORDER_STAGE_NUM=1 %}
		action="{ORDER_STAGE_CONTACTS_URL}"
	  {% ELSEIF ORDER_STAGE_NUM=2 %}
		action="{ORDER_STAGE_DELIVERY_URL}"
	  {% ELSEIF ORDER_STAGE_NUM=3 %}
		action="{ORDER_STAGE_PAYMENT_URL}"
	  {% ELSEIF ORDER_STAGE_NUM=4 %}
		action="{ORDER_STAGE_CONFIRM_URL}"
	  {% ENDIF %}
	  method="post"  id="myform"   
	>
и замените его на
<form
	  {% IF ORDER_STAGE_NUM=1 %}
		action="{ORDER_STAGE_CONTACTS_URL}"
		onsubmit="if(!$('#sites_client_phone').val().length){$('#sites_client_phone').css('font-size','0').val('Отсутствует');}"
	  {% ELSEIF ORDER_STAGE_NUM=2 %}
		action="{ORDER_STAGE_DELIVERY_URL}"
	  {% ELSEIF ORDER_STAGE_NUM=3 %}
		action="{ORDER_STAGE_PAYMENT_URL}"
	  {% ELSEIF ORDER_STAGE_NUM=4 %}
		action="{ORDER_STAGE_CONFIRM_URL}"
	  {% ENDIF %}
	  method="post"  id="myform"   
	>



#127051 Изменить Размеры Слайдера,добавить Блок С Инфо,слоган

Отправлено ТурИстин на 15 Март 2014 - 13:56

Просмотр сообщенияMelanna (15 Март 2014 - 12:38) писал:

извините, я не так выразилась. Не могу найти не main.css а код который нужно искать и заменять
Попробуйте пользоваться поиском:
когда курсор в коде, нажмите сочетание клавиш ctrl+F
в появившемся окне введите #header .flexslider li .bigPic {
внимательно смотрите в строчке - всё ли совпадает дальше по коду, которые предлагают вам модераторы. и заменяйте строчки.