transport.tv.php - или как транспортировать tv

Расковыривая github.com/bezumkin/modExtra до крови, да бы упаковать свой mSocial я столкнулся с грустной проблемой он не умеет создавать 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 после удаления приложения, делаю это через ресольверы, пока другого варианта не нашел (хотя такой вариант не очень нравится).
Павел Карелин
29 января 2016, 10:48
modx.pro
3
2 282
+5

Комментарии: 19

Василий Наумкин
29 января 2016, 14:05
+3
А если Василий вдруг решит добавить эту глупость в свой репозиторий, я буду плакать как маленькая девочка.
А если ты вдруг её пришлешь в репозиторий — я добавлю.
    Павел Карелин
    29 января 2016, 14:06
    0
    Ах если бы я знал как, сейчас разберусь))).
      Сергей Скат
      29 января 2016, 14:44
      -3
      Плачу как маленькая девочка от смеха ))))))
        Павел Карелин
        29 января 2016, 14:45
        +3
        Что я не знаю как гитом пользоваться? Все мы чего то не знаем, хрен ли тут смешного? Тем более что разбираться там пару секунд.
      Павел Карелин
      29 января 2016, 14:09
      0
      Я же не знаю, вдруг ты скажешь:
      — Павел что ты мне тут за какашку прислал?
        Михаил
        29 января 2016, 14:13
        +2
        Норм так какашка. В общем борще как за ингридиент подойдет.
          Павел Карелин
          29 января 2016, 14:16
          0
          Ай спасибо, уже радостно пихаю Василию в репозиторий свое непотребство.
          Воеводский Михаил
          29 января 2016, 16:59
          1
          0
          Крайне полезная вещь — когда-то много времени потратил, чтобы разобраться. Надо было тогда сразу отправлять в репо, да только думал так же, как ты сейчас ))
            Павел Карелин
            29 января 2016, 17:02
            0
            Еще возможно сейчас лексиконы туда полетят. Их я тоже не нашел.
              Павел Гвоздь
              29 января 2016, 17:31
              0
              Так /core/components/modExtra/lexicon/ разве не они?
                Павел Карелин
                29 января 2016, 17:33
                0
                Все верно, а вот запихивания в оптионы значения лексиконов нет. То есть что бы у оптионов были например русски имена и русские описания. Это делается вообще через другой класс core/model/modx/modlexicon.class.php.
                  Василий Наумкин
                  29 января 2016, 17:53
                  0
                  Ты про эти "оптионы"?

                  Абсолютно всё, что нужно для лексиконов, хранится в этих файлах.
                    Павел Карелин
                    29 января 2016, 18:45
                    0
                    Все правильно, я уже об этом знаю, я понял о чем говорит гвоздь. Да эти лексиконы залетают на ура, все работает как часы, за это тебе большое спасибо, но мы наверно немного не понимаем друг друга, попробую чуть подробнее описать. У каждого option есть два поля для указания в них имя поля и поле описания (которые берутся из лексиконов).

                    yadi.sk/i/HEk-lWuunwdQF

                    Эти поля как я понимаю хранятся именно в lexicon_entries. И именно их я и хочу закидывать, можно без лексиконов, но это как то грустно. Опять же во всех твоих компонентах сделанно именно так. Пытаюсь равняться на них.

                    ps: вполне возможно, да скорей всего есть другой вариант, но я его пока не нашел.
                      Василий Наумкин
                      29 января 2016, 19:34
                      +2
                      Я не знаю, как ты ищешь. Вот же они.

                      Этот файл подключается в default.inc.php, если что. А вот подробности.
                        Павел Карелин
                        29 января 2016, 19:50
                        0
                        А вот видимо и другой вариант, действительно можно ведь просто задать лексиконы по умолчанию, а не пихать их в отдельную таблицу. Искатель из меня действительно ни какой)) Спасибо огроменное, как ты вообще меня терпишь.
        Павел Карелин
        29 января 2016, 22:13
        0
        И все бы хорошо, вот только ни фига не удаляются теперь эти твшки.
        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
          Алексей
          30 января 2016, 00:20
          +1
          Наткнулся на занятную библиотеку от Марка www.modmore.com/blog/2016/introducing-alpacka/ для разработки приложений на MODX
            Александр
            23 мая 2018, 06:48
            0
            Подскажите, как сейчас это делается?
            С момента создания этой темы структура modExtra изменилась, и я что-то не могу найти в каком месте добавляется TV.
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            19