Alex Zhuravlev

Alex Zhuravlev

С нами с 31 мая 2014; Место в рейтинге пользователей: #97
Alex Zhuravlev
27 октября 2017, 13:23
+1
В снипете getLanguages забыл дописать $output = ''; в самом начале, а иначе в логе будет много PHP notice: Undefined variable: output
Alex Zhuravlev
16 октября 2017, 22:24
2
0
Дописал под себя getLanguages.
Сделал вывод в placeholders и добавил css class «active»

getLanguages
<?php
$pdo = $modx->getService('pdoTools');

$uri = $_SERVER['REQUEST_URI'];
if(substr($uri, 0, 1)) {
    $uri = mb_substr($uri, 1);
    $tmp = explode('/', $uri);
    if($path = $tmp[0]) {
        $tmp = $modx->getObject('localizatorLanguage', array('http_host:LIKE' => "%/{$path}/"));
        if($tmp) {
            $uri = str_replace("{$path}/", "", $uri);
        }
    }
}

$protocol = 'https://';
$languages = $modx->getIterator('localizatorLanguage');
foreach($languages as $language) {
    if(mb_substr($language->http_host, -1) == '/') {
        $placeholders = array(
            'cultureKey'=>$language->key,
            'active'=>$language->key == $modx->localizator_key ? 'active' : '',
            'url'=>$protocol . $language->http_host . $uri,
        );
    } else {
        $placeholders = array(
            'cultureKey'=>$language->key,
            'active'=>$language->key == $modx->localizator_key ? 'active' : '',
            'url'=>$protocol . $language->http_host . '/' . $uri,
        );
    }
    $output .= $pdo->getChunk($tpl, $placeholders);
}

return $output;

В шаблоне
<div class="langs">
	{$_modx->runSnippet('!getLanguages', ['tpl' => 'section-langs-1',])}
	<div class="dropdown-menu">
		{$_modx->runSnippet('!getLanguages', ['tpl' => 'section-langs-2',])}
	</div>
</div>

Содержимое section-langs-1
<a href="#" data-toggle="dropdown" role="button" aria-expanded="false"></a><img class="imglang {$active}" src="/assets/img/flags/{$cultureKey}.png" alt="{$cultureKey}">

Содержимое section-langs-2
<div class="dropdown-item">
    {if $active != 'active'}
        <a class="{$active}" href="{$url}"><img class="imglang {$active}" src="/assets/img/flags/{$cultureKey}.png" alt="{$cultureKey}"></a>
    {else}
        <div class="{$active}"><img class="imglang {$active}" src="/assets/img/flags/{$cultureKey}.png" alt="{$cultureKey}"></div>
    {/if}
</div>

На уникальность не претендую, но уверен что кому то поможет.
Критика и правки приветствуются.
Alex Zhuravlev
16 октября 2017, 14:42
0
Игорь, спасибо.
Простите за дубль вопроса, невнимательно прочитал топик.
Alex Zhuravlev
16 октября 2017, 11:47
0
Еще один момент, при конфигурации site.com/ru/ и site.com/en/ создаю страницу для 404 и прописываю ее в системных настройках и дальше ее перевожу через localizator и все работает если вызываю 404 из контекстов, но если получить 404 из site.com/404 (без контекста) то получаю поля из основного контекста web без участия localizator…
А как сделать что бы нельзя было попасть на site.com а сразу перекидывать пользователя на /ru/ или /en/?

У меня nginx + apache и в последнем

php_flag register_globals Off
AddDefaultCharset utf-8
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{HTTP:Accept-Language} (ru|uk|by|kz) [NC]
RewriteRule .* https://site.com/ru/ [R=302,L]

RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteRule .* https://site.com/en/ [R=302,L] 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
Alex Zhuravlev
16 октября 2017, 01:40
1
0
Имею конфигурацию
site.com/ru/ и site.com/en/
в HTTP HOST (localizator) прописано site.com/ru/ и site.com/en/

вывожу
{'site_url' | option} или {$_modx->config.site_url}
и получаю site.com/ а должно быть site.com/ru/ или /en/

Посмотрел на примере у Владимира и там тоже самое если перейти на EN и посмотреть ссылку в шапке на логотипе, то она ведет на русский контекст

Как правильно выводить линк на главную страницу того (псевдо) контекста где сейчас находится пользователь а не посылать его на основной по умолчанию web
<a class="site-logo" href="{'site_url' | option}">Site</a>
или
<a class="site-logo" href="{'site_url' | option}{'cultureKey' | option}/">Site</a> 
Alex Zhuravlev
13 мая 2015, 11:36
1
+1
Поправил название топика ))) дабы не вводить в заблуждение.
Alex Zhuravlev
12 мая 2015, 00:10
0
Rahim Egamov, спасибо за 5 коп

1. А я вообще первым делом убираю все в dashboards )))
2. Ну как то совсем не гуманно 777 ставить
3. Из Штатов и Азии пинги не айс, а для России вообще супер
Alex Zhuravlev
11 мая 2015, 00:55
0
Спасибо, просто и очень красиво
Alex Zhuravlev
11 мая 2015, 00:43
0
Спасибо.
А я что то и не заметил Tv от babel ))) класс!
Alex Zhuravlev
11 мая 2015, 00:42
0
Если нужно что бы в eng версии выводились TV или вообще какие либо поля именно из eng ресурсов, например pagetitle который у меня идет и в хлебные крошки и для eng названия альбомов то по решению Ivan Shvindin и парсера Василия я реализовал это так
[[++cultureKey:is=`ru`:then=`[[+pagetitle]]`:else=`[[#[[+tv.babelLanguageLinks:getID]].pagetitle]]`]]
а в самом сниппете getID указал return $array[eng];
То есть получаем из Tv babelLanguageLinks массив вида web:3;eng:13 и вытаскиваем из него 13 после чего подпихиваем в парсер что бы получить нужное поле из этого id
Alex Zhuravlev
05 мая 2015, 07:50
0
Класс! Век живи, век учись. Спасибо, это превосходно.

P.S. Остается только после копирования табличку ***_site_tmplvar_contentvalues в базе поправить, что бы babel понимал что это переводы и при копировании контекста снимать галку «Предотвратить дублирование псевдонимов ресурсов»
Alex Zhuravlev
04 мая 2015, 10:35
0
Дмитрий, нашли для себя вариант?
Alex Zhuravlev
04 мая 2015, 10:33
0
А дублировать не так уж сложно — копируешь ресурс и переносишь копию в нужный контекст.
А если товаров 10000+ и настает день когда нужно добавить еще один, в итоге нужно копировать все товары а потом их еще и переводить что превратится в жуткую рутину.
ИМХО лучше делать вариант одной базы товаров под все языки а описание на разных, и в таком варианте контент менеджер будет ходить по всем товарам и добавлять переводы.
Вот тут есть решение сегодня буду реализовывать этот вариант.
Alex Zhuravlev
03 мая 2015, 12:14
0
По идее можно написать запрос который будет брать строки с значением web из таблицы ***_site_content и копировать их в туже таблицу с новым значением контекста а также добавлять в таблицу ***_site_tmplvar_contentvalues новый контекст и id новых страниц.
Alex Zhuravlev
27 августа 2014, 16:55
0
Нашел что в шопкипере проблема появляется если использовать ajax в корзине.
Когда корзина обновляется, и приходят обновленные данные, то пропадает значение из clientConfig.
Помогите понять почему так может происходит.

if(typeof(data.html)!='undefined') jQuery('#shopCart').replaceWith(data.html);
Как это работает?
Alex Zhuravlev
27 августа 2014, 13:42
0
В системных событиях плагина clientConfig стоит «onHandleRequest» а если отключаю то значения из CC вообще не появляются.
В плагине проверяю на событие
if ($modx->event->name != 'OnHandleRequest') {return;}
А как вызвать событие вручную в скрипте?
Alex Zhuravlev
27 августа 2014, 13:24
0
Володя а какой именно у тебя глюк возникает, можешь описать.
Можешь описать конфигурацию хостингов где работает и где нет.
Нужно еще Марку написать вот только багрепорты собрать.
Я тестирую в локалке, Apache 2.2 / PHP 5.4
Alex Zhuravlev
26 августа 2014, 23:56
0
Тоже столкнулся с проблемой, делаю дубликат ключа из системных настроек шопкипера а в итоге при обновлении вижу что значение появляется и сразу пропадает.

Получается так — создаю в clientconfig ключ «shk.ordersumm_delivery»
в плагине доставки шопкипера прописано

//Сумма заказа при которой предоставляется бесплатная доставка
    $ordersumm_delivery = intval($modx->getOption('shk.ordersumm_delivery',null,0));
и дублирую в чанке этот параметр

<span> Test [[++shk.ordersumm_delivery]]  </span>
В результате получаю такую картину, если вывожу параметр внутрь контейнера с id=«shopCart»

<div id="shopCart">
	<span> Test [[++shk.ordersumm_delivery]]  </span>
</div>
то при рефреше страницы я вижу параметр но после загрузки он пропадает, но если убираю id=«shopCart» то все выводит нормально.

В логах и консоли все чисто. Куда копать не понимаю.