UMIhelp

Разработка сайта на UMI.CMS => Настройка системы и модулей => Тема начата: technoexpert от 28 Августа 2012, 18:54:48

Название: Вёрстка в несколько колонок через таблицы
Отправлено: technoexpert от 28 Августа 2012, 18:54:48
Собственно, вопрос в заголовке. Каким образом реализовать многоколоночную вёрстку, избежав использования div-ов и всяких разных float. Если упрощать вопрос, то необходимо вывести NN-ное количество позиций из каталога и поставить тег, потом ещё столько же - снова тот же тег и т.д. Как оно реализуется на php- - понятно, но как это сделать в UMI - неясно, ибо с внедрением кода в шаблоны здесь совсем никак. Есть ли какие встроенные решения? Что использовать - tpl или xslt - мне без разницы.
Название: Re:Вёрстка в несколько колонок через таблицы
Отправлено: robert от 28 Августа 2012, 22:03:15
На php реализуемо, но к сожалению по этому что-то толковое не могу сказать.
Как альтернативу можно JS использовать, но отображаться при загрузке криво может.

Но почему Вы уходите от дивов и флоатов?
Название: Re:Вёрстка в несколько колонок через таблицы
Отправлено: technoexpert от 28 Августа 2012, 22:49:30
robert

В том-то и дело, что на php реализуемо за пять минут, а как это вставить в UMI - даже через собственный макрос-функцию, совершенно непонятно. У UMI, увы, с какими-либо примерами по разработке вообще полная пятая точка. Да и документация примерами из жизни отнюдь не блещет.

Почему не хочу с DIV-ами - ну, во-первых, потому что предпочитаю вообще табличную вёрстку. Она железобетонная, а не жидкая каша, как с DIV-ами, ведущая себя по-разному на разных системах. Потом, необходима совместимость с достаточно древними браузерами, ибо варианты для созерцания - "загрузите более современный браузер, потому что в вашем наш суперсайт не работает" - показывать клиенту считаю за полную порнографию. И ещё неприятный момент с DIV-ами. Если в таблице разная информация по размеру в ячейках, то они - TD-шки - саморегулируются по высоте в пределах ряда. Если такое сделать DIV-ами - в несколько рядов - то обычно получаем наезжающую друг на друга кашу...

И уже не раз сталкивался с необходимостью разбить готовый вывод заголовков, например, по четыре. Вот и как оно реализовать?
Название: Re:Вёрстка в несколько колонок через таблицы
Отправлено: admin от 29 Августа 2012, 01:59:15
В tpl это делается либо макросами, либо при помощи js постобработки html кода.

В xslt можно после n-ого элемента вставить свой текст, например в шаблоне по которому выводится краткая карточка товара сделать конструкцию котороя проверяет что это элемент кратный 5 например, то есть после каждого 5 элемента появится ваш текст

Пример:
<xsl:if test="position() mod 5 = 0 ">
<hr />
</xsl:if>

Но это не решает вопрос с таблицами, так как вы не можете внутри конструкции <xsl:if> написать невалидный код, а тег </tr> будет невалидным, так как открывающийся тег лежит где-то в другом месте ваших шаблонов.

Выход есть используя <xsl:foreach> конструкцию или колдовать с условиями и position()

Опять же вы можете использовать макрос(то есть php, если он вам роднее и понятней)
Цитировать
а как это вставить в UMI - даже через собственный макрос-функцию, совершенно непонятно
не совсем понятно что именно вас смутило
Название: Re:Вёрстка в несколько колонок через таблицы
Отправлено: technoexpert от 30 Августа 2012, 16:03:05
admin

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

Попробую через xsl:if и foreach, потому как в tpl такого вообще нет. Вероятно, что просто можно будет формировать новую таблицу для каждого ряда, что вполне устраивает. И ещё возникает вопрос - раз xsl-шаблонизатор хочет валидные теги, значит он где-то их проверяет на валидность - а, следовательно, это можно выключить. Не знаете часом, где оно? Просто в том безумном количестве файлов, из которого состоит система, найти нужный - задача нетривиальная, особенно учитывая, что названы они хрен-знает-как.

По поводу макросов - я просто некорректно написал. Имел в виду, что мне пока непонятно, как это вставить в макрос. У меня проблемы с пониманием, как мне забрать значение, полученное при обработке шаблона - т.е. сосчитаную позицию из каталога, обработать её и вернуть в шаблон обратно, в случае соответствия определённому значению. Или я и считать долже в макросе? Тогда это странно, потому как происходит дублирование функций CMS. А хоть с какими примерами в документации UMI, как я уже упоминал, дело обстоит крайне хреново - всё на уровне "догадайся сам"...
Название: Re:Вёрстка в несколько колонок через таблицы
Отправлено: admin от 30 Августа 2012, 16:26:00
я бы предложил налегать именно на xslt, так как это будет вернее, не зря же это язык преобразования (писать что-то в php или js для внешнего вида, как-то не так)

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