transport.tv.php - или как транспортировать tv
Расковыривая github.com/bezumkin/modExtra до крови, да бы упаковать свой mSocial я столкнулся с грустной проблемой он не умеет создавать tv. Ну или может быть умеет, но я не нашел как, в связи с этим решил немного его расширить добавив новый транспортер. Итак, что же нужно делать?
Добавляем новую глобальную переменную в _build/build.config.php
Добавляем новый блок в _build/build.transport.php
Создаем новый файл transport.tv.php в папочке _build/data
pss: запихал все это дело в офф репозиторий.
psss: есть проблема с удалением tv после удаления приложения, делаю это через ресольверы, пока другого варианта не нашел (хотя такой вариант не очень нравится).
Добавляем новую глобальную переменную в _build/build.config.php
define('BUILD_TV_UPDATE', true);
Добавляем новый блок в _build/build.transport.php
/* add tv */
if (defined('BUILD_TV_UPDATE')) {
$attr[xPDOTransport::RELATED_OBJECT_ATTRIBUTES]['Tv'] = array(
xPDOTransport::PRESERVE_KEYS => false,
xPDOTransport::UPDATE_OBJECT => BUILD_TV_UPDATE,
xPDOTransport::UNIQUE_KEY => 'name',
);
$tvs = include $sources['data'] . 'transport.tv.php';
if (!is_array($tvs)) {
$modx->log(modX::LOG_LEVEL_ERROR, 'Could not package in tvs.');
}
else {
$category->addMany($tvs);
$modx->log(modX::LOG_LEVEL_INFO, 'Packaged in ' . count($tvs) . ' tvs.');
}
}
Создаем новый файл transport.tv.php в папочке _build/data
$tvs = array();
$tmp = array(
'mSocialPost' => array(
'caption' => 'Постим в twitter?',
'type' => 'listbox',
'elements' => 'Да==1'
),
);
foreach ($tmp as $k => $v) {
$tv = $modx->newObject('modTemplateVar');
$tv->fromArray(array(
'name' => $k,
'caption' => @$v['caption'],
'type' => @$v['type'] ? @$v['type'] : 'text',
'elements' => @$v['elements'] ? @$v['elements'] : '',
'default_text' => @$v['default_text'] ? @$v['default_text'] : '',
));
$tvs[] = $tv;
}
unset($tmp);
return $tvs;
ps:: ясен фиг что гиганты сочтут это как совершенно понятно и просто, но думаю может кому пригодится, вот мне бы пригодилось, так сказать «решения для идиота». Которые я так люблю. А если Василий вдруг решит добавить эту глупость в свой репозиторий, я буду плакать как маленькая девочка.pss: запихал все это дело в офф репозиторий.
psss: есть проблема с удалением tv после удаления приложения, делаю это через ресольверы, пока другого варианта не нашел (хотя такой вариант не очень нравится).
Комментарии: 19
А если Василий вдруг решит добавить эту глупость в свой репозиторий, я буду плакать как маленькая девочка.А если ты вдруг её пришлешь в репозиторий — я добавлю.
Ах если бы я знал как, сейчас разберусь))).
Плачу как маленькая девочка от смеха ))))))
Что я не знаю как гитом пользоваться? Все мы чего то не знаем, хрен ли тут смешного? Тем более что разбираться там пару секунд.
Я же не знаю, вдруг ты скажешь:
— Павел что ты мне тут за какашку прислал?
— Павел что ты мне тут за какашку прислал?
Норм так какашка. В общем борще как за ингридиент подойдет.
Ай спасибо, уже радостно пихаю Василию в репозиторий свое непотребство.
Крайне полезная вещь — когда-то много времени потратил, чтобы разобраться. Надо было тогда сразу отправлять в репо, да только думал так же, как ты сейчас ))
Еще возможно сейчас лексиконы туда полетят. Их я тоже не нашел.
Так /core/components/modExtra/lexicon/ разве не они?
Все верно, а вот запихивания в оптионы значения лексиконов нет. То есть что бы у оптионов были например русски имена и русские описания. Это делается вообще через другой класс core/model/modx/modlexicon.class.php.
Все правильно, я уже об этом знаю, я понял о чем говорит гвоздь. Да эти лексиконы залетают на ура, все работает как часы, за это тебе большое спасибо, но мы наверно немного не понимаем друг друга, попробую чуть подробнее описать. У каждого option есть два поля для указания в них имя поля и поле описания (которые берутся из лексиконов).
yadi.sk/i/HEk-lWuunwdQF
Эти поля как я понимаю хранятся именно в lexicon_entries. И именно их я и хочу закидывать, можно без лексиконов, но это как то грустно. Опять же во всех твоих компонентах сделанно именно так. Пытаюсь равняться на них.
ps: вполне возможно, да скорей всего есть другой вариант, но я его пока не нашел.
yadi.sk/i/HEk-lWuunwdQF
Эти поля как я понимаю хранятся именно в lexicon_entries. И именно их я и хочу закидывать, можно без лексиконов, но это как то грустно. Опять же во всех твоих компонентах сделанно именно так. Пытаюсь равняться на них.
ps: вполне возможно, да скорей всего есть другой вариант, но я его пока не нашел.
Я не знаю, как ты ищешь. Вот же они.
Этот файл подключается в default.inc.php, если что. А вот подробности.
Этот файл подключается в default.inc.php, если что. А вот подробности.
А вот видимо и другой вариант, действительно можно ведь просто задать лексиконы по умолчанию, а не пихать их в отдельную таблицу. Искатель из меня действительно ни какой)) Спасибо огроменное, как ты вообще меня терпишь.
И все бы хорошо, вот только ни фига не удаляются теперь эти твшки.
Skipping modPluginEvent object (data object does not exist and cannot be removed): Array ( [pluginid] => 0 [event] => OnDocFormSave )
Skipping modTemplateVar object (data object does not exist and cannot be removed):
xPDOVehicle does not support resolvers of type
Наткнулся на занятную библиотеку от Марка www.modmore.com/blog/2016/introducing-alpacka/ для разработки приложений на MODX
Подскажите, как сейчас это делается?
С момента создания этой темы структура modExtra изменилась, и я что-то не могу найти в каком месте добавляется TV.
С момента создания этой темы структура modExtra изменилась, и я что-то не могу найти в каком месте добавляется TV.
В исходниках одного из компонентов нашел вот такой файл. Оно?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.