Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

evobabel-0.2 - Не работает на версии MODX EVO 1.1-d8.0 от 11.04.2016 ((( #350

Closed
wmlev opened this issue May 24, 2016 · 40 comments

Comments

Projects
None yet
6 participants
@wmlev
Copy link
Contributor

commented May 24, 2016

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

@bagi091

This comment has been minimized.

Copy link
Contributor

commented May 25, 2016

Ошибка появляется из-за того что в последних версиях по-другому хранятся параметры по умолчанию для сниппетов и плагинов. Сниппет и плагин evoBabel должны брать параметры по умолчанию из конфигурации модуля. При этом у сниппета пустые параметры по умолчанию, но когда вы связываете сниппет с модулем, получается что в базу записывается пустая json строка ({}), поэтому перед любым сохранением сниппета evoBabel необходимо удалять все содержимое поля "параметры по умолчанию"
По шагам:

  1. устанавливаем evobabel 0.2 из extras
  2. Создаем шаблон Язык запоминаем его id
  3. Создаем документ pagetitle = RU, longtitle = русский, alias = ru, template = Язык_template_id
  4. Создаем TV. Имя = lang, Заголовок = языковые версии ресурса, тип ввода = custom input, возможные значения = @eval return $modx->runSnippet("evoBabel");
  5. Добавляем этот tv ко всем шаблонам кроме шаблона Язык.
  6. Далее Открываем управление модулем evoBabelLexicon. Вкладка Конфигурация. Ставим галочку Включить 'общие' параметры. Заполняем параметры (обязательно заполнить id шаблона языка, id TV языковых связей, остальные можно не менять, главное проверить чтобы после значения не было пробела в input). После этого открываем вкладку Зависимости -> Жмем кнопку управление зависимостями. Добавляем сниппет и плагин evobabel. На этом завершаем редактирование модуля. Тут внимательнее, так как после выбора зависимостей нет кнопки сохранить, только закрыть, введенные данные на вкладке конфигурация могут быть утрачены.
  7. Открываем плагин evobabel.Вкладка Конфигурация, выбираем Импортировать данные из модуля evobabellexicon. По желанию в конфигурации плагина можно отметить tv и шаблоны для синхронизации.
  8. Открываем сниппет evobabel. Вкладка свойства Импортировать данные из модуля evobabellexicon. ВАЖНО после этого нужно удалить {} из параметры по умолчанию и нажать сохранить.

Если будут замечания пишите. Если поможет, то позже постараюсь обновитьна http://docs.evolution-cms.com/

@bagi091

This comment has been minimized.

Copy link
Contributor

commented May 26, 2016

Упс. поторопился я, оказалось что с плагином evobabel та же ерунда, так что сейчас готовлю pull в котором предложу переписать часть, где формируется кэш сниппетов и плагинов.

@Pathologic

This comment has been minimized.

Copy link
Contributor

commented May 26, 2016

@bagi091 Попробуйте вот это #353

@bagi091

This comment has been minimized.

Copy link
Contributor

commented May 26, 2016

@Pathologic К сожалению, Ваше решение не помогает в этой ситуации. Попробую описать ситуацию подробнее. Задача состоит в том, чтобы правильно объединить две "конфигурации по умолчанию" (модуля и плагина/сниппета). Это происходит в файле cache_sync строки 224 и 238. Там стоит проверка на пустоту строки, но в новых версиях modx пустая "конфигурация по-умолчанию" сохраняется в базу как {}. Модуль сохраняет свои настройки таким же образом, либо пустой, либо полный json, который в любом случае отличается от пустой строки. В итоге когда мы попадаем на те самые строки 224 и 238, то именно из-за этого мы получаем конструкцию вида {} {} (два json через пробел), которую нельзя распарсить ни как json, ни как старый стиль хранения параметров.

Если расчитывать на то, что "параметры по умолчанию" модуля и плагина/сниппета всегда либо в старом формате, либо в новом, то правильно объединить их не так уж и сложно, но если окажется что модуль хранит параметры в json а сниппет/плагин в старом формате, то тут решение задачи становится похожим на костыль (хотя при этом подозреваю что таких ситуаций не должно быть много)

Задачу можно упростить если сделать в классе document parser метод декодирования старого формата в json. Сейчас это делается на стороне клиента через js.

@Pathologic

This comment has been minimized.

Copy link
Contributor

commented May 26, 2016

Понятно, тут параметры считаются строками. Может будет лучше при сохранении парсить через $modx->parseProperties(), а потом сохранять итоговый массив настроек в виде json?

@bagi091

This comment has been minimized.

Copy link
Contributor

commented May 26, 2016

Я думал об этом, но меня остановили два момента
Первый: Будет запускаться событие OnParseProperties, хотя это можно обойти через тот же переключатель что и в $modx->sendErrorPage()
Второй: Нужно ли в siteCache.idx хранить подписи и другую служебную информацию параметров по умолчанию? Потому что в этом варианте параметры будут храниться в формате key=>value

@Pathologic

This comment has been minimized.

Copy link
Contributor

commented May 26, 2016

Нет, будет только ассоциативный массив (параметр => значение) с теми настройками, которые заполнены - моя правка как раз это и исправляет.

@Pathologic

This comment has been minimized.

Copy link
Contributor

commented May 26, 2016

А в parseProperties можно добавить параметр fire_events = null и по нему проверять, нужен ли вызов события.

@bagi091

This comment has been minimized.

Copy link
Contributor

commented May 26, 2016

Касательно последнего комментария. Посмотрел внимательнее и понял что это лишнее, так как достаточно не передавать $elementName и $elementType

@bagi091

This comment has been minimized.

Copy link
Contributor

commented May 26, 2016

А на счет Вашей правки немного не согласен, что если пустое значение параметра является значением, которое в плагине/сниппете/модуле проходит проверку на соответствие типу? Например if ($param5 === '') В случае если мы не включим param5 в массив всех параметров как раз из-за того что он пустой, мы можем нарушить работу чужих разработок.

Поэтому мне кажется что проверка $value != '' и !empty($value) мне кажется избыточной.

@Pathologic

This comment has been minimized.

Copy link
Contributor

commented May 26, 2016

Такое поведение было до нововведений, даже в большинстве сниппетов:

if (!isset($paramname)) $paramname = 'default';
@bagi091

This comment has been minimized.

Copy link
Contributor

commented May 26, 2016

Да, во многих сниппетах так и есть, но мало ли, всякое бывает.
Я думаю что все равно любой значение введенное пользователем даже пустое, должно передаваться в параметры

@Pathologic

This comment has been minimized.

Copy link
Contributor

commented May 26, 2016

Тогда поломается еще и DocLister, потому что там используется такой метод:

public static function getkey($data, $key, $default = null)
    {
        $out = $default;
        if (is_array($data) && (is_int($key) || is_string($key)) && $key !== '' && array_key_exists($key, $data)) {
            $out = $data[$key];
        }
        return $out;
    }

Если сохранять пустые значения, то этот метод никогда не вернет $default.

@bagi091

This comment has been minimized.

Copy link
Contributor

commented May 26, 2016

Убедили))

@bagi091

This comment has been minimized.

Copy link
Contributor

commented May 26, 2016

А можно тогда задать вопрос для чего нужна проверка if (is_array($row)) ? Как я понимаю в новых настройках это условие всегда должно быть истинным

@Pathologic

This comment has been minimized.

Copy link
Contributor

commented May 26, 2016

До правки у меня эти настройки криво парсились из старых, так что наверное не нужна проверка.

@bagi091

This comment has been minimized.

Copy link
Contributor

commented May 26, 2016

Понял, спасибо)

@Pathologic

This comment has been minimized.

Copy link
Contributor

commented May 26, 2016

Потом проверю, если проблема не будет возникать при установке плагинов, то и проверку уберу.

@bagi091

This comment has been minimized.

Copy link
Contributor

commented May 26, 2016

Нет, как раз-таки проверка нужна, я уже проверил. мы ведь сохраняем значения в виде json строки key => value. Получается что после создания файла siteCache.idx $row не массив а строка.

@Pathologic

This comment has been minimized.

Copy link
Contributor

commented May 26, 2016

Тогда пусть будет 😄

@Typodin

This comment has been minimized.

Copy link

commented May 27, 2016

Правка #353 для eFilter не сработала, все равно ошибка. Почитал переписку, но новых идей не возникло, может есть еще варианты?

Кстати и ТВ параметр не цепляется к категории, выдает ошибку http://joxi.ru/Dr8vy7Zuk9E9W2

@bagi091

This comment has been minimized.

Copy link
Contributor

commented May 27, 2016

Тут должна быть не только правка #353, но и небольшое изменение кода, а именно файл cache_sync строки 223-225 и 237-239 необходимо заменить. Сейчас сделаю pull

@Typodin

This comment has been minimized.

Copy link

commented May 27, 2016

Капец, заработало! Спасибо, куда слать на пиво с чипсами?)

@bagi091

This comment has been minimized.

Copy link
Contributor

commented May 27, 2016

@Typodin а что Вы писали вместо этих строк?

@Typodin

This comment has been minimized.

Copy link

commented May 27, 2016

И 353 от Максима (Pathologic) и то что в почту пришло:

файл cache_sync строки 223-225 и 237-239

@Pathologic

This comment has been minimized.

Copy link
Contributor

commented May 27, 2016

if ( ($tmp1['properties'] != '' && $tmp1['properties'] != '{}') || ($tmp1['sharedproperties'] != '' && $tmp1['sharedproperties'] != '{}') )

Эта проверка может быть не нужна, потому что в tmpProp по-любому окажется массив

@bagi091

This comment has been minimized.

Copy link
Contributor

commented May 27, 2016

эта проверка нужна на тот случай если и модуль и сниппет/плагин не имеет параметров по умолчанию ни в старом виде, ни в новом

@bagi091

This comment has been minimized.

Copy link
Contributor

commented May 27, 2016

Если убрать эту проверку, то для каждого сниппета и плагина будет дважды вызваться
$modx-> parseProperties() на этапе добавления их в кэш, причем часто это будет вхолостую

@Pathologic

This comment has been minimized.

Copy link
Contributor

commented May 27, 2016

var_dump($modx->parseProperties(''));
//array (size=0)
@Pathologic

This comment has been minimized.

Copy link
Contributor

commented May 27, 2016

Но вообще да, смысл парсить, если парсить нечего изначально

@bagi091

This comment has been minimized.

Copy link
Contributor

commented May 27, 2016

Ну да, лишней эта проверка не будет. Можете включить это исправление в свой pull?

@SebastianoFereiro

This comment has been minimized.

Copy link

commented Sep 22, 2016

Внимательно прочитал все выше перечисленное, но так и не смог запустить evobabel на версии MODX EVO 1.1-d8.0 от 11.04.2016
Подскажите, есть ли решение, возможно где-то вариант вернуть старую логику или внести изменения сразу в значения в бд

@dmi3yy

This comment has been minimized.

Copy link
Owner

commented Sep 22, 2016

Скачайте версию 8.1.2 с гитхаба на верси 8.0 есть проблемы с параметрами плагина потому и глючит

Lukianenko Dmytro
Web developer
Site: http://dmi3yy.com
Skype: dmi3yy
Phone: +38 (091) 357-10-80

четверг, 22 сентября 2016 г. в 15:54, SebastianoFereiro написал:

Внимательно прочитал все выше перечисленное, но так и не смог запустить evobabel на версии MODX EVO 1.1-d8.0 от 11.04.2016
Подскажите, есть ли решение, возможно где-то вариант вернуть старую логику или внести изменения сразу в значения в бд


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub (#350 (comment)), or mute the thread (https://github.com/notifications/unsubscribe-auth/AAo3MxRKe1wK6UtMqe9bZtqvsKmZomTtks5qsnp2gaJpZM4IlbZz).

@Typodin

This comment has been minimized.

Copy link

commented Sep 22, 2016

Не забудьте отписаться заработало или нет)

@SebastianoFereiro

This comment has been minimized.

Copy link

commented Sep 22, 2016

update до 1.1-d8.1.2 вылечил проблему полностью, а вот попытка точечно поиграться с
document.parser.class.inc.php и cache_sync.class.processor.php не дали результата.
dmi3yy огромное спасибо за решение и вообще за Ваши сборки.

@SebastianoFereiro

This comment has been minimized.

Copy link

commented Sep 23, 2016

Но проблема не одна, еще не работает плагин evoBabelPlaceholder и плейсхолдер [+switchLang+] на новой 8.1.2 версии. Ошибок в консоли нет.

@dmi3yy

This comment has been minimized.

Copy link
Owner

commented Sep 23, 2016

Это должно работать а там когда ставили настроили коректно общие параметры между модулем и сниппетом плагином ?

Lukianenko Dmytro
Web developer
Site: http://dmi3yy.com
Skype: dmi3yy
Phone: +38 (091) 357-10-80

пятница, 23 сентября 2016 г. в 13:32, SebastianoFereiro написал:

Но проблема не одна, еще не работает плагин evoBabelPlaceholder и плейсхолдер [+switchLang+] на новой 8.1.2 версии. Ошибок в консоли нет.


You are receiving this because you commented.
Reply to this email directly, view it on GitHub (#350 (comment)), or mute the thread (https://github.com/notifications/unsubscribe-auth/AAo3M_ltB09jMbcVCO9zRjPFuBmkzG0zks5qs6rOgaJpZM4IlbZz).

@SebastianoFereiro

This comment has been minimized.

Copy link

commented Sep 23, 2016

Модуль EvobabelLexicon
+общие параметры
-> конфигурация :
id шаблона языка - 14 (шаблон язык)
id TV языковых связей - 15 (tv related)
-> Зависимости
evoBabel - Plugin
evoBabel - Snippet
lang - Snippet

Плагин
evoBabel
Импортировать общие параметры модуля: EvobabelLexicon - Сохранить
Проверка системных событий - OnPageNotFound, OnDocFormSave, OnBeforeEmptyTrash, OnEmptyTrash, OnWebPageInit,OnDocDuplicate.

Сниппет
evoBabel

Импортировать общие параметры модуля: EvobabelLexicon - Сохранить

Есть вариант как глянуть, более подробно связку?

и еще ньюанс, при обновлении для работы вкладки с SimpleGallery на новой версии получаем
jquery.min.js:4 Uncaught TypeError: a.indexOf is not a functionr.fn.load
лечится заменой файл /manager/media/script/jquery/jquery.min.js с версии 8.0
Глубже не смотрел, но надо учесть

@SebastianoFereiro

This comment has been minimized.

Copy link

commented Sep 29, 2016

Как я понимаю, пока решения нет?

@dmi3yy

This comment has been minimized.

Copy link
Owner

commented Oct 13, 2016

Проблема с расшаренными параметрами все вопросы сюда:
#356

в планах сегодня пофиксить

@dmi3yy dmi3yy closed this Oct 13, 2016

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.