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 january 2016, 13:48    Павел Карелин   
2    597 +5

Comments (17)

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

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

                      yadi.sk/i/HEk-lWuunwdQF

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

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

                        Этот файл подключается в default.inc.php, если что. А вот подробности.
                        1. Павел Карелин 29 january 2016, 19:50 # 0
                          А вот видимо и другой вариант, действительно можно ведь просто задать лексиконы по умолчанию, а не пихать их в отдельную таблицу. Искатель из меня действительно ни какой)) Спасибо огроменное, как ты вообще меня терпишь.
        2. Павел Карелин 29 january 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
          1. Алексей 30 january 2016, 00:20 # +1
            Наткнулся на занятную библиотеку от Марка www.modmore.com/blog/2016/introducing-alpacka/ для разработки приложений на MODX
            You need to login to create comments.