Возникла необходимость добавить в migx поле типа resourcelist, чтобы добавить тв связанных ресурсов. Немного погуглив, нашел следующее: [{"caption":"Ресурсы", "fields": [ {"field":"res","caption":"Связанный ресурс","inputTVtype":"resourcelist"} ] }] это записывается во вкладки формы. Все замечательно, но при выборе ресурса, выводится только его id как же ограничить список ресурсов определенным родителем? с первым пунктом более-менее понятно — гугл помог, реализовать вывод pagetitle ресурса вполне реально, но вот второй пункт уже несколько дней не дает мне покоя. Если кто знает, дайте подсказку.
На старой версии сайта (которая еще была на связке MODX+Livestreet), была мультиязычность. Об этом я писал тогда отдельную статью. Тогда описывался небольшой плагин, модифицированная версия которого задействована и сейчас. Вот его код: gist.github.com/Fi1osof/74eeb88cf3f3b996ec47 Так же здесь был задействован весьма полезный пакет xLexicon. Вообще над централизованным механизмом мультиязычности надо будет еще думать, ибо с ним далеко не все классно в MODX-е (плюс к этому еще и небольшую, но неприятную багу нашел), но в целом все работает (надо будет только еще оставшиеся части сайта перевести). Особенно приятно себя getdata-процессоры показали. Вот я дописал код в базовый процессор web/resources/getdata, который используется многими процессорами для получения данных ресурсов, и поля, для которых есть языковые значения, автоматически переопределяются. Таким образом даже в выпадающие списки данные пошли на нужном языке без каких-либо лишних движений. В общем, надеемся, что западные гуру будут чаще появляться на нашем сайте. А для русскоязычных разработчиков пригодится сама информация по мультиязычности.
Ведь если что-то надо добавить, так же придется лезть в шаблон и что-то править когда-то я думал — было бы здорово написать такую штуку чтобы вставил пару файлов со скриптами на сайт, и затем только меняй обертку для каждого конкретного случая. использование шаблонизации на стороне клиента звучит интересно, сюда я наверно и буду копать
тогда лучше всего просто переделай формирование списка id, примерно так: [id=>isfolder] [234=>0, 223=>0, 32->1 ...] или [docs][folders]<br /> [234,223][32]
$docs[]=$v;
Прям так можно, не надо оборачивать в {}? Нет, это моя ошибка, надо оборачивать, то есть {$docs[]=$v;} и еще вот такой код {if $doc = $modx->getObject('modResource',$v) AND $doc->get('template') == 3}
в шаблоне вызывает ошибку. Но в этом случаи, если в цикле не будет получен один из документов по id ($v) ничего не случиться. Можно ли в условии как-то записать все-таки так, положить объект в переменную, а потом через энд вызвать у него гет? Нет, AND Smarty не понимает, как и не понимает типа {if $key != $value}. Но конкретно для этого случая я написал корректный пример: {if $modx->getObject('modResource',$v)->template == 3} Здесь истина будет только в том случае, если будет получен документ и у него шаблон 3.
$docs[]=$v; Прям так можно, не надо оборачивать в {}? {$docs[]=$v;} и еще вот такой код {if $doc = $modx->getObject('modResource',$v) AND $doc->get('template') == 3} в шаблоне вызывает ошибку. Но в этом случаи, если в цикле не будет получен один из документов по id ($v) ничего не случиться. Можно ли в условии как-то записать все-таки так, положить объект в переменную, а потом через энд вызвать у него гет? Я вот так делаю, вроде работает, но может можно лучше-проще? {foreach from=$myArray key=k item=v} {if $doc = $modx->getObject('modResource',$v)} {if $doc->get('template') == 3} {$docs[]= $v} {else} {$folder[] = $v} {/if} {/if} {/foreach}
Товар — в 'id:IN', если Категория — в 'OR:parent:IN' в этом конкретном случае, мне кажется, правильнее в tv хранить эти id либо двумя списками, либо хранить пары {id,isfolder} — тогда при выводе гораздо меньше ресурсов потратится.
Резюме: учи Смарти :) Решений, как видишь, куча.
Если затем последует вызов процессора, то можно переопределить его, передать необходимые данные, и в самом процессоре все и сделать