Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

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

 

Первый вариант - видел у некоторых авторов шаблонов, которые предлагают разные виды шапки сайта - решение "в лоб". Они просто в \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 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.