Перейти к содержанию
Форум поддержки пользователей VamShop

О путях развития


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

Заметил в 1.34 замечание о перспективе использования gettext для локализации. И, если честно, пришёл в ужас. :) Насколько я помню, gettext система двухуровневая, т.е. сначала пишется файл данных, затем он компилируется, затем только используется. И это, фактически с необходимостью тащить с собой английскую версию.

Причины перехода на gettext частично понятны. Сейчас локализация "размазана" между конфигом smarty и старым php-файлом с константами. Хотелось бы централизовано. Причина сохранения такой размазонности тоже понятна, достаточно взглянуть в код. Ссылки, кнопки, формы, всё это генерируется готовым, в php-файлах, частично нарушая идею отрыва дизайна от кода. И звучащие в соседнем форуме упрёки справедливы. возможности гибко влиять на дизайн нет...

Допустим, в некотором блоке у нас есть две ссылки. Они генерируются в php-файле и заносятся в переменную smarty, откуда целиком вставляются в шаблон. А если я хочу одну из них оставить как есть, а другую выделить? Можно было бы приписать ей определённый класс, но функция генерации ссылки напрямую классы не поддерживает. Но это неважно, потому что php-файл не знает, что мне взбредёт в голову править именно эту ссылку. Лезть в исходники и получать +1 гемморой, при обновлении магазина? Или оборачивать ссылку в span, например так: "<span class="mylink1">{$LINK_TO_SOMEWHERE}</span>", а за тем в css писать "span.mylink1 a { то, что надо... }"? Про последнее, один мой друг говорит, что это "выковыривание мяса из пельменей"...  ;D

Что же можно предпринять? А можно вот что. Прежде всего стоит ознакомится со статьёй "Smarty – не просто шаблоны". Даже если не реализовывать предложенное по максимуму, то простая реализация расширения, типа vam_link способна решить сразу две проблемы,

"{vam_link page="`$smarty.const.FILENAME_SOMEPAGE`" url="`$url_params`" class="mylink" connection="SSL" parameters="onload=\"что-то там...\""}{#link_text#}{/vam_link}".

Т.е. фактически здесь из php-скрипта необходимо только подготовить параметр url_params, поскольку даже страницу smarty может взять прямо из константы, через встроенную переменную $smarty. При этом текст ссылки, т.к. объект, подлежащий локализации, можно переместить в конфиг. А поскольку load можно делать несколько раз, то можно вынести некоторые повторяющиеся надписи в отдельные секции и избежать дублирования. Остальное сделает система компиляции шаблонов и кеширования.

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

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

Atrus

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

Насчёт gettext.

Так я ведь пока что никуда не перешёл, просто пробую разные варианты.

Касательно конкретно gettext я уже и сам склоняюсь больше к тому, что gettext не будет лучшим решением.

Насчёт локализации вообще.

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

Спасибо, статью видел.

На том же сайте и другие интересные статьи есть.

Вообще, с твоими идеями я полностью согласен и буду постепенно воплощать в жизнь.

Но есть и другая сторона медали, такой подход очень сильно усложнит шаблоны, но да, действительно html будет отделён от php полностью.

В качестве примера могу посоветовать посмотреть на oos-shop.de (ещё один клон osCommerce на смарти). Проектик тоже интересный, мне там нравятся как некоторые вещи сделаны.

Там как раз сделано так как ты написал.

Есть там бесплатная версия (вот здесь можно взять - http://prdownload.berlios.de/oos/oos_1412.zip) и посмотри как выглядят шаблоны там, т.е. там как раз в php коде нет html совсем.

Вот пример как выглядит html шаблон списка категорий в боксе Разделы:


<{if $category.level > 0}>
<{$category.level|repeat:"&nbsp;&nbsp;"}>
<{/if}>
<a href="<{if $category.parent == 0}><{html_href_link modul=$modules.main file=$filename.shop cPath=$category.counter}><{else}>
<{html_href_link modul=$modules.main file=$filename.shop cPath=$category.path}><{/if}>">
<img src="<{$theme_image}>/icons/<{if $category.isSelected}>current_<{/if}>folder.png" border="0" alt="<{$category.name}>" title=" <{$category.name}> " width="16" height="16"></a>
&nbsp;<a href="<{if $category.parent == 0}><{html_href_link modul=$modules.main file=$filename.shop cPath=$category.counter}>
<{else}><{html_href_link modul=$modules.main file=$filename.shop cPath=$category.path}><{/if}>">
<{if $category.isSelected}><b><{/if}>
<{$category.name}>
<{if $category.isSelected}></b><{/if}>
<{if $category.isHasSubCategories == 1}>-&gt;<{/if}></a>
<{if $category.countProductsInCategory}>&nbsp;(<{$category.countProductsInCategory}>)<{/if}><br />
[/code]

Мне кажется это всё-таки чересчур, нужно оставаться где-то по-середине, всё-таки излишнее усложнение шаблонов это тоже "не есть гуд".

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

Там как раз сделано так как ты написал.

Нет, там как раз не так. :) Там чистый smarty без навесок. По этому ссылки они генерят сами, встявляя их в "a", по этому код так пестрит if'ами... ;-)

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

Понятно.

Я обязательно поэкспериментирую по твоему совету и по мотивам статьи http://php.russofile.ru/ru/authors/research/smarty_cms

Гляну, как получится.

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