Перейти к содержанию
RGB

Несколько вариантов компоновки элементов шаблона

Рекомендуемые сообщения

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

 

Первый вариант - видел у некоторых авторов шаблонов, которые предлагают разные виды шапки сайта - решение "в лоб". Они просто в \catalog\view\theme\****\template\common\ делают склад разных вариантов header.tpl с разными названиями, которые, соответственно, подключают в контроллере header.php в зависимости от выбранных пользователем настроек. При этом очевидна проблема из-за невозможности предусмотреть такую ситуацию для других разработчиков модулей, которые справедливо полагают, что в \catalog\view\theme\****\template\common\ лежит один единственный header.tpl и которые могут через ocmod в нем пробовать что-то менять. Как следствие, будет общее усложнение кода и необходимость все изменения в плане развития шаблона вносить сразу во все версии файла.

 

Второй вариант - складывать всю логику по переключению компоновки элементов внутрь одного header.tpl:

<?php if ($header_template_1) { ?>
  // 1-й вариант компоновки
<?php } else if ($header_template_2) { ?>
  // 2-й вариант компоновки
<?php } else if ($header_template_3) { ?>
  // 3-й вариант компоновки
<?php } ?>

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

 

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

 

Какие еще варианты могут быть и как, по-вашему, лучше реализовывать такую задачу?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Лично мне ближе вариант со схемами с первого примера, да, не такая совместимость с другими авторами, но давайте будем реалистами, любой шаблон не будет совместим на 100% с другими модулями, а для всего остального есть адаптация, еще плюс схем - меньше каши, поддержка удобнее, блоки гибче

 

Можно правда попробовать еще хитрый способ, оставить один шаблон header.tpl/twig и в него уже подгружать схемы основных блоков, по типу как с корзиной или поиском 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо!

7 часов назад, ArtemPitov сказал:

оставить один шаблон header.tpl/twig и в него уже подгружать схемы основных блоков, по типу как с корзиной или поиском 

но тогда же с совместимостью вообще беда будет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
10 hours ago, RGB said:

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

 

 

страницы или header шаблона?

А что если максимум что возможно сделать средствами css? Тому же блоку корзины или всему блоку header присвоить класс напр. "left"  и потом через css согласно нему разместить все элементы слева. Браузер все отрисует правильно, не будет каши как с яваскрипт, не будет мусора и дублей в коде шаблона, с совместимостью будет все ок, так как будет только один вывод той же корзины. 
Минус такого метода - не все можно сделать через css, хотя можно сделать очень много.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
17 минут назад, sv2109 сказал:

не все можно сделать через css

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
8 minutes ago, RGB said:

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

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


Насчет позиционирования элементов на странице расскажу как это сделано в друпале. 
Там есть регионы. Это блоки на странице типа опенкартовских левая колонка и правая колонка, но там их намного больше + каждый пользователь может легко создать новые, для этого достаточно
1. в конфиге темы прописать этот регион, напр. 
regions[above_comments]  = Above comments

2. в самом шаблоне сделать его вывод
<?php if (!empty($above_comments)): ?>
   <?php print $above_comments; ?>
<?php endif ?>

Все, после этого этот блок стает доступным в админке в меню Блоки (типа опенкартовскиъ схем) куда каждый пользователь может вывести свой любой модуль. 
То есть можно сделать несколько регионов, напр. header_left, header_right, header_center итд и уже сам пользователь выведет напр. логотип или меню туда куда ему нужно. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Меня в способе с добавлением новых "нестандартных" позиций в движок смущает прежде всего вопрос совместимости таких позиций с пользовательской самодеятельностью. Грубый пример - вот вы предлагаете добавить header_left, а если пользователь решит там выводить карусель товаров? Думаю, понятно, что из этого ничего хорошего не получится, тогда надо еще как-то предусматривать некий фильтр по типам контента, который можно или нельзя выводить в новых позициях, а это еще больше усложнит задачу :-( 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.