Foren / National / Russian / Скины и дизайн / Кукизы в cotemplate

Kopusha
#1 6. Februar 2018, 16:40

Для folio.list.tpl (не принципиально, может быть и для page.list и тд) у меня есть 2 абсолютно разные сложные верстки (каждая затрагивающая свои js и свои шаблоны создания файлов и тд.)

В настройках юзера создал экстраполе "показывать черепицей/показывать в рядочек" и при переключении проверяю в самом листе <!-- IF {PHP.usr.profile.user_экстраполе} == '1' --> показывай один вид else другой. 

Вопрос - я хочу вынести эту переключалку из профиля юзера в низ самих листов. Максимально информативно увидеть пример можно на http://www.wedlife.ru/photos/ - внизу "показывать  квадратные или стандартные  превью".

Но возник вопрос как это правильно сделать и главное - сохранить на лету - в примере просто меняется стиль отображения страницы - при этом грузятся все файлы нужные для двух вариантов отображения. 

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

Вопросы 

1) Может есть проще и элегантнее способ? 
(в идеале как я вижу - как то вынести радиобокс из профиля в листы и там при нажатии на радиобокс записать в бд значение 1/2 без кнопки "сохранить" и перегрузить страницу.)

2) Если по 1 нет советов - как в tpl проверить средствами cotemplate значение кукиз? Как писать условие?

Заранее спасибо!

Added 5 hours later:

Разобрался сам.
Записываю нужное куки стандартно яваскриптом при выборе верстки, потом в кастомфункциях темы делаю

function get_folio_cookie () {
      $folio_cookie = cot_import('folio_cookie', 'C', 'ALP');
     return $folio_cookie;
}

И уже в фолио получаю через {PHP|get_folio_cookie} значение. Его можно проверить в условиях. 

PS Жаль что цикл ROW даже в условиях нельзя дважды использовать.
Типа IF что то BEGIN ROW --- END ROW else BEGIN
 ROW --- END ROW - так срабатывает только второй цикл(


Dieser Beitrag wurde von Kopusha (am 6. Februar 2018, 22:22, vor 6 Jahre) bearbeitet
Kort
#2 7. Februar 2018, 18:55

Иногда все делать в шаблонизаторе не совсем получается )

Но можно в условии не сразу использовать BEGIN/END, а подгружать "подшаблоны" через {FILE ...} и в них прописывать регулярные блоки. Вроде как у меня где-то было такое и работало.

SED.by - создание сайтов, разработка плагинов и тем для Котонти
Kopusha
#3 8. Februar 2018, 12:49

Если делать так
УСЛОВИЕ ЕСЛИ 1 то
{FILE "themes/{PHP.theme}/inc/файл с BEGIN.ROW END.ROW .tpl"}
ELSE
{FILE "themes/{PHP.theme}/inc/файл с вторым циклом BEGIN.ROW END.ROW .tpl"}
то бьет ошибки. Если без BEGIN.ROW END.ROW тплки - то все ок(

Macik
#4 10. Februar 2018, 00:17

Да, в виду ограничений шаблонизатора условие надо вставлять внутрь «цикла», т.е. внутрь маркеров блока (BEGIN/END).

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

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
Kopusha
#5 10. Februar 2018, 11:07

То что хтмл скрывать это в моем случае смерть (там jquery очень сильно ложит фротнэнд и в том и в этом варианте вывода, удваивать нельзя) да и в любом случае не вариант. Я потому и удивился что Корт написал что можно как то без костылей сделать.

Я сделал так - идентичный контент в виде хтмл со стилями в едином цикле бегин энд и он обрамлён разным по условию стилем к примеру .first или .second.

И уже в цсс .first .title это одно а .second .title это второе отображение.