Контексты, Fenom, Babel
Друзья и снова здравствуйте!
И снова вопрос с целью упростить будущую жизнь себе и тем кто может работать дальше с проектом.
Реализовал проект с мультиязычностью, Babel, Fenom и все прелести жизни. В виду острой нехватки времени и опыта для каждого из шаблонов реализовал отдельные шаблоны в которых внёс изменения поменял ссылки и кажется был доволен, но уже на первых же правках хотелось себя убить за то решение. В связи с чем постепенно перевожу всё в единые шаблоны. Изучил лексиконы, пространства имён, if в феноме конечно же спасает, но столкнулся с такой ситуацией:
Есть кусок шаблона который выглядит вот так:
используя:
Если много, т.е. для каждой ссылки мы получаем «кавардак» и всё это сложновато становится читать и воспринимать.
А Если для всего блока, то в дальнейшем мы имеем все шансы просто забыть или не знать что там ниже где то else и тоже надо бы поправить что то.
Есть ли варианты вывода которые были бы и читаемы и не требующие дублирования кусков html.
Возможно моё решение в целом не верно, буду рад советам и напутствиям!
Спасибо!
И снова вопрос с целью упростить будущую жизнь себе и тем кто может работать дальше с проектом.
Реализовал проект с мультиязычностью, Babel, Fenom и все прелести жизни. В виду острой нехватки времени и опыта для каждого из шаблонов реализовал отдельные шаблоны в которых внёс изменения поменял ссылки и кажется был доволен, но уже на первых же правках хотелось себя убить за то решение. В связи с чем постепенно перевожу всё в единые шаблоны. Изучил лексиконы, пространства имён, if в феноме конечно же спасает, но столкнулся с такой ситуацией:
<div class="content__item content__item1">
<a href="{$_modx->makeUrl(2)}" class="content__heading content__heading--1">{'gg_about' | lexicon}</a>
<a href="{$_modx->makeUrl(2)}" class="content__heading-a">
<p>{2 | resource : 'introtext'}</p>
</a>
<span class="content__more2"> {'gg_more' | lexicon}</span>
<a href="{$_modx->makeUrl(2)}" class="content__more"> {'gg_more' | lexicon}</a>
</div>
<div class="content__item content__item2">
<a href="{$_modx->makeUrl(4)}" class="content__heading content__heading--2">{'gg_invest' | lexicon}</a>
<a href="{$_modx->makeUrl(4)}" class="content__heading-a">
<p>{4 | resource : 'introtext'}</p>
</a>
<span class="content__more2"> {'gg_more' | lexicon}</span>
<a href="{$_modx->makeUrl(4)}" class="content__more"> {'gg_more' | lexicon}</a>
</div>
<div class="content__item content__item3">
<a href="{$_modx->makeUrl(3)}" class="content__heading content__heading--3">{'gg_trade' | lexicon}</a>
<a href="{$_modx->makeUrl(3)}" class="content__heading-a">
<p>{3 | resource : 'introtext'}</p>
</a>
<span class="content__more2"> {'gg_more' | lexicon}</span>
<a href="{$_modx->makeUrl(3)}" class="content__more"> {'gg_more' | lexicon}</a>
</div>
т.е. идёт вызов большого кол-ва ссылок в разных блоках, кнопках, заголовках в разных местах.используя:
{if $_modx->context.key == 'web'}
{else}
{/if}
Попробовал два варианта, грубо говоря один if и много:Если много, т.е. для каждой ссылки мы получаем «кавардак» и всё это сложновато становится читать и воспринимать.
А Если для всего блока, то в дальнейшем мы имеем все шансы просто забыть или не знать что там ниже где то else и тоже надо бы поправить что то.
Есть ли варианты вывода которые были бы и читаемы и не требующие дублирования кусков html.
Возможно моё решение в целом не верно, буду рад советам и напутствиям!
Спасибо!
Комментарии: 12
Не слишком понятно, куда именно применяются много if.
В разных контекстах ссылки тоже разные?
Как вариант — сделать это несколькими чанками, тогда сразу будет видно, как устроена логика.
В разных контекстах ссылки тоже разные?
Как вариант — сделать это несколькими чанками, тогда сразу будет видно, как устроена логика.
Да, ссылки на разные ресурсы, аналогичные но в другом контексте.
Много if к каждому {$_modx->makeUrl(4)} и т.п.
Много if к каждому {$_modx->makeUrl(4)} и т.п.
Сделайте у контекстов настройки, куда прописывайте ID соответствующего раздела у данного контекста:
pg_catalog = 2
pg_news = 4
и т. д.
Тогда можно будет сделать так:
pg_catalog = 2
pg_news = 4
и т. д.
Тогда можно будет сделать так:
{var news = $_modx->config.pg_news}
<div class="content__item content__item2">
<a href="{$_modx->makeUrl($news)}" class="content__heading content__heading--2">{'gg_invest' | lexicon}</a>
<a href="{$_modx->makeUrl($news)}" class="content__heading-a">
<p>{$news | resource : 'introtext'}</p>
</a>
<span class="content__more2"> {'gg_more' | lexicon}</span>
<a href="{$_modx->makeUrl($news)}" class="content__more"> {'gg_more' | lexicon}</a>
</div>
Скажите, пожалуйста, не сталкивались ли с проблемой отображения лексиконов на одной из версий сайтов? У меня на русской версии всё нормально (контекст web), с английской проблемы (контекст en): не отображается текст лексикона в minishop2 (msProducts), вместо него отображается имя лексикона. Но! Если прописать в конце адресной строки ?cultureKey=en — всё нормально… В настройках контекста cultureKey прописан.
Если у вас нет такой ошибки, напишите свои настройки второго контекста, а также плагин, которым это всё подключается, пожалуйста.
Если у вас нет такой ошибки, напишите свои настройки второго контекста, а также плагин, которым это всё подключается, пожалуйста.
Второй контекст у меня de, первый на английском, но так же web
Настройки: joxi.ru/12MEVedf4QqN52
Плагин:
Настройки: joxi.ru/12MEVedf4QqN52
Плагин:
<?php
if($modx->context->get('key') != "mgr") {
switch ($_REQUEST['cultureKey']) {
case 'de':
$modx->switchContext('de');
break;
default:
$modx->switchContext('web');
break;
}
unset($_GET['cultureKey']);
}
Спасибо за ответ.
А в .htaccess что у вас или вы nginx пользуетесь?
А в .htaccess что у вас или вы nginx пользуетесь?
На проде nginx
А вот на тесте:
А вот на тесте:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(en|de)/favicon.ico$ favicon.ico [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(en|de)/assets(.*)$ assets$2 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(en|de)?/?(.*)$ index.php?cultureKey=$1&q=$2 [L,QSA]
Мне нравится делать примерно вот так:
{set $items = [
'2' => 'gg_about',
'4' => 'gg_invest',
'3' => 'gg_trade',
]}
{set $idx = 1}
{foreach $items as $id => $lex}
<div class="content__item content__item{$idx}">
<a href="{$id | url}" class="content__heading content__heading--{$idx}">{$lex | lexicon}</a>
<a href="{$id | url}" class="content__heading-a">
<p>{$id | resource : 'introtext'}</p>
</a>
<span class="content__more{$idx}"> {'gg_more' | lexicon}</span>
<a href="{$id | url}" class="content__more"> {'gg_more' | lexicon}</a>
</div>
{set $idx = $idx + 1}
{/foreach}
Спасибо!
А как реализовать данное решение с контекстами и разными id ссылок у контекстов?
А как реализовать данное решение с контекстами и разными id ссылок у контекстов?
Через if или switch
{set $items = [
'2' => 'gg_about',
'4' => 'gg_invest',
'3' => 'gg_trade',
]}
{if $_modx->context.key == 'eng'} {* {if $_modx->config.cultureKey == 'en'} *}
{set $items = [
'12' => 'gg_ne_about',
'14' => 'gg_invest_li',
'13' => 'gg_trader',
]}
{elseif $_modx->context.key == 'deu'} {* {if $_modx->config.cultureKey == 'de'} *}
{set $items = [
'22' => 'gg_about',
'24' => 'gg_invest_on',
'23' => 'gg_trade_in',
]}
{/if}
Выше решение ))
Там без подобных условий:
Значения подтягиваются автоматом из настроек конкретного контекста.
Я там только в начале опечатался, сорри. Должно быть так:
Там без подобных условий:
{if $_modx->context.key == 'eng'}
...
{/if}
Значения подтягиваются автоматом из настроек конкретного контекста.
Я там только в начале опечатался, сорри. Должно быть так:
{var $news = $_modx->config.pg_news}
<div class="content__item content__item2">
<a href="{$_modx->makeUrl($news)}" class="content__heading content__heading--2">{'gg_invest' | lexicon}</a>
<a href="{$_modx->makeUrl($news)}" class="content__heading-a">
<p>{$news | resource : 'introtext'}</p>
</a>
<span class="content__more2"> {'gg_more' | lexicon}</span>
<a href="{$_modx->makeUrl($news)}" class="content__more"> {'gg_more' | lexicon}</a>
</div>
В данном случае это, на мой взгляд, оптимальная реализация, но предложу немного мутировать.
В настройках контекста создать переменную, пусть будет ctx_res, в которой через запятую перечислить все требуемые id.
Алиасы ресурсов привести в соответствие.
И вывести, например, через pdoMenu
В настройках контекста создать переменную, пусть будет ctx_res, в которой через запятую перечислить все требуемые id.
Алиасы ресурсов привести в соответствие.
И вывести, например, через pdoMenu
{'pdoMenu' | snippet:[
'parents' => 0,
'resources' => 'ctx_res' | option,
'tpl' => 'tpl',
]}
tpl:
<div class="content__item content__item{$idx}">
<a href="{$id | url}" class="content__heading content__heading--{$idx}">{('gg_' ~ $alias) | lexicon}</a>
<a href="{$id | url}" class="content__heading-a">
<p>{$id | resource : 'introtext'}</p>
</a>
<span class="content__more{$idx}"> {'gg_more' | lexicon}</span>
<a href="{$id | url}" class="content__more"> {'gg_more' | lexicon}</a>
</div>
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.