Дмитрий

Дмитрий

С нами с 16 декабря 2015; Место в рейтинге пользователей: #47
Дмитрий
08 марта 2018, 12:41
0
Всё сижу и обдумываю еще вопросы, т.к. новость очень хорошая. Хочу еще спросить следующее:
1) Перенос контроллеров и процессоров на REST планируется до первого релиза, или уже после? Насколько сильно первые дополнения, написанные под 3-ю версию придется переписывать к релизу 3.2 например? Есть ли понимание, насколько сильно будет штормить систему на старте?
2) xPDO и общая концепция системы остается — обновляется только подход ко всему этому, осовременивание, верно? Я правильно понял, что для того, чтобы развернуть на MODX 3 простенький бложек или визиточку, достаточно будет дождаться релиза pdoTools для 3 версии?
Дмитрий
08 марта 2018, 12:00
+3
О-Т-Л-И-Ч-Н-О! Хорошее настроение с утра обеспечено хорошей новостью. Спасибо большое!
Вопрос про extJS сам напрашивается — я правильно понял, что он пока что остается, но в планах выпилить его?
Дмитрий
07 марта 2018, 22:32
0
Там выкатили обновление, нужно в настройках приложения в Facebook еще добавить домены в доп.поле. Буквально 3 дня назад настраивал авторизацию и столкнулся с этим. Правда обновление это на днях заработает, поэтому по идее именно сейчас должно работать как работало.
Дмитрий
06 марта 2018, 21:10
0
Кхм. А как вам идея MIGX таблица с типом ввода столбцов тоже MIGX таблицами? Я бы показал, как это в действии работает, но тот сайт, где я это делал, сейчас упал, т.к. новый работник видимо в Fenom совсем не может. Первое что нашел, плюс на самом modx.pro должна быть инфа об этом. За пару часов можно сделать достаточно гибкую структуру. Ну, конечно, это все равно будет MIGX, но что поделать.
Дмитрий
05 марта 2018, 14:54
+1
Хорошо, насколько вероятно, что Йеллоустонский вулкан проснется и похоронит всю планету под километровым слоем пепла?
Кто знает, кто знает.
Я это без какой-либо агрессии говорю :) Просто поймите, если бы это было проблемой, что время от времени получается какая-то фигня из кэша, которую невозможно разобрать — о ней бы уже знали, и с MODX на работали бы вовсе, либо эту проблему решили. Если спустя 8 лет существования системы нет статистики по такому событию, значит — его вероятность ничтожна мала и никто вам об этом не ответит с какой-то уверенностью.
Дмитрий
05 марта 2018, 12:00
0
То есть вы просто на шару придумываете проблему и спрашиваете об этом?
Дмитрий
05 марта 2018, 11:15
+1
1) Что по вашему кривой кэш?
2) Системе уже 8 лет и я думаю, кто-нибудь бы заметил такую оплошность. Если у вас что-то криво вылезает, то следует проследить логику работы сниппетов, шаблонов и так далее. Сделал более 40-ка сайтов на Revo и никогда не замечал «кривого» кэша.
Дмитрий
02 марта 2018, 15:34
0
а зачем интернет-магазин без минишопа? :)
Дмитрий
02 марта 2018, 10:31
0
Подскажите еще пожалуйста, а как если мне в шаблоне надо вывести [[+pagetitle]] на выбранном языке не текущего ресурса, а другого, как getfield?
Ну тут только сниппет писать. Где-то там же в комментах в основной теме что-то было похожее.
Дмитрий
02 марта 2018, 10:12
0
Ну, знаете, бывают случаи, когда ТВ на сайтах вообще не используются. Я собрал с пяток магазинов, где у меня нет ни одного ТВ. На двух из них стоит Localizator и все всем довольны.
Дмитрий
01 марта 2018, 22:44
0
1) Какое еще поле вы хотите вывести? Если TV — то именно туда — никак. Если вы конечно не гуру extJS. Но вы вроде как обратное и говорите. А вообще если нужны переведенные TV, то придется создавать два TV, например tvname_ru и tvname_en и далее либо придется работать с условиями if/else и выводить нужные в чанках. Ну, типа такого:
{if ('localizator_key'|option)!='ru'}
	{var $tv = $_modx->resource.tvname_en}
	{else}
	{var $tv = $_modx->resource.tvname_ru}
{/if}

<p> {$tv} </p>
Это такой, простой и костыльный вариант.
Если делать по-хорошему, то можно раскопать исходники Locaziator'a и там можно найти прикольную фишку в плагине с подменой плейсхолдеров.
И можно набросать свой плагин, который будет в зависимости от языка сайта подставлять в плейсхолдер tvname значение либо русского, либо английского языка. Сложновато объяснил, но если шарить в теме, то можно понять :)
Не понял про поле Content. Оно для каждого языка разное. Вы его заполняете как раз в этой вкладке.

2) Изи, изи. См. код выше. Подойдет отлично.
3) Вот это, насколько я знаю, уже нельзя. Нет, конечно, можно заморочиться с плагином маршрутизации для Localizator и отключить всю эту штуку и будет работать.
Но если нужно менять язык страницы без изменения адреса, то можно просто писать в куки текущий язык сайта и переключать его. Я писал об этом вот здесь. То решение далеко не идеальное, но отличное направление в нужную сторону.
4) [[+pagetitle]]. Или {$_modx->resource.pagetitle}. Ну или еще как-нибудь. Все поля в нужном языке подменяются в локализаторе, я написал об этом выше. Не подменяется только поле Content, оно выводится как localizator_content. То есть тут никакой магии. Если вы правильно установили компонент, то все должно работать.
Дмитрий
27 февраля 2018, 11:09
+1
Во, здорово. Спасибули! :)
Дмитрий
24 февраля 2018, 11:44
1
0
Да, извиняюсь, не заметил.
Это редактор обработал теги. Изначально это выглядит так
Дмитрий
20 февраля 2018, 01:04
0
Как вариант, правда не самый удачный — набросать сниппет, который будет вычислять глубину вложенности и подставлять какой-нибудь класс. А с помощью CSS делать margin или еще что-нибудь.
Ну или делать тоже самое через AJAX.
Дмитрий
19 февраля 2018, 18:14
+1
Ах да. Сам написал не совсем правильно.
Смотрите, если почитать код, то там можно увидеть, что есть обращение к куки.
Но у вас на демке куки не пишутся. Значит что? Что в этом проблема. И тут я вспомнил, что нужен еще один плагин. Я его просто в другое место спрятал и поэтому сразу не нашел.
<?php
if($modx->context->key == "mgr"){return;}
$alias = $modx->context->getOption('request_param_alias', 'q');
$request = $_REQUEST[$alias];
$tmp = explode('/', $request);
if ($tmp[0]=='en'){
    $modx->setOption('cultureKey', 'en');
    setcookie('lang','en',0,'/');
} else {
    $modx->setOption('cultureKey', 'ru');
    setcookie('lang','ru',0,'/');
}
Событие OnHandleRequest, например.
Дмитрий
19 февраля 2018, 12:57
+1
Чтобы локализации работали с mFilter, необходимо накидать плагин. У меня примерно такой:
<?php
if($modx->context->key == "mgr"){return;}
$modx->setOption('cultureKey', 'en');
if (!empty($_COOKIE['lang'])){
    if ($_COOKIE['lang']=='en'){
        $modx->setOption('cultureKey', 'en');
    } else {
        $modx->setOption('cultureKey', 'ru');
    }
}
событие OnInitCulture
Переписать можно куда лучше и универсальнее, просто задачи не стояло. Надеюсь, помог.
Дмитрий
13 февраля 2018, 10:23
0
Кхм. Localizator как-таки и создан для того, чтобы уйти от контекстов. Поэтому, как я полагаю, он просто совершенно не создан для того, чтобы делать языковые версии для множества контекстов.
Дмитрий
12 февраля 2018, 15:10
0
Вот еще прикольная статья, можно ознакомится. Очень подробно расписано
Дмитрий
12 февраля 2018, 12:59
0
можно пользоваться компонентом RobotsBuilder. Вполне себе на мультисайтах хорошо работает.
Дмитрий
05 февраля 2018, 14:48
0
Таки нашел сам. Столько времени потратил :)
Плагин вешается на события, указанные в коде.
Тут пример с использованием кастомного класса, но убрать его и заменить на что-то другое не проблема, я полагаю.
<?php

$modx->addPackage('extendResource', $modx->getOption('core_path').'components/extendresource/model/');
 
switch ($modx->event->name) {
    case 'OnDocFormPrerender':
        $views = 0;
        $keywords='';
        $level = 0;
        if (isset($scriptProperties['resource'])) {
            $id = $scriptProperties['resource']->get('id');
            $query = $modx->newQuery('extendResource');
            $query->where(array(
               'resource' => $id,
            ));
            $extendResource = $modx->getObject('extendResource',$query);
            if (is_object($extendResource)) {
                $views = $extendResource->get('views');
                $keywords = $extendResource->get('keywords');
                $level = $extendResource->get('level');
            }
        }
$modx->controller->addHtml(<<<HTML
<script>
    Ext.ComponentMgr.onAvailable('modx-resource-main-right', function(page) {
        page.on('beforerender', function() {
            page.insert(2,{
                xtype: 'textfield'
                ,name: 'views'
                ,value: {$views}
                ,anchor: '100%'
                ,layout: 'anchor'
                ,fieldLabel: 'Просмотры'
            });
            page.insert(3,{
                xtype: 'textfield'
                ,name: 'level'
                ,value: {$level}
                ,anchor: '100%'
                ,layout: 'anchor'
                ,fieldLabel: 'Уровень'
            });
        })
    });
    Ext.ComponentMgr.onAvailable('modx-resource-main-left', function(page) {
        page.on('beforerender', function() {
            page.insert(2,{
                xtype: 'textfield'
                ,name: 'keywords'
                ,value: '{$keywords}'
                ,anchor: '100%'
                ,layout: 'anchor'
                ,fieldLabel: 'Ключевые слова'
            });
        })
    });
</script>
HTML
);
        break;
        
    case 'OnDocFormSave':
        // do processing logic here. 
        $id = $scriptProperties['resource']->get('id');
        $query = $modx->newQuery('extendResource');
        $query->where(array(
          'resource' => $id,
        ));
        $extendResource = $modx->getObject('extendResource',$query);
        if (!is_object($extendResource)) {
            $extendResource = $modx->newObject('extendResource');
            $extendResource->set('resource', $id);            
        }
        $extendResource->set('views', $_POST['views']);
        $extendResource->set('keywords', $_POST['keywords']);
        $extendResource->set('level', $_POST['level']);
        $extendResource->save();
        break;
}
return;