БлагоДарю, Николай! Вы, как всегда выручаете меня. Не знал, как подключить в свой компонент классы стороннего компонента. addPackage пришёл на помощь благодаря Вам.
Расскажите, как добавить свои методы в класс modx? Чтобы вызывать их таким образом в смарти шаблоне {$modx->customMethod($array)} Реально ли это вообще?
Если нужно именно вывести данные, пусть и с обработкой перед выводом, то выгоднее не использовать getCollection, а выбрать через fetchAll(PDO::FETCH_ASSOC) Именно это и делает метод getIterator
Отвечу, рассчитывая на комментарий Николая, если я неправильно что-то пониманию. Если нужно именно вывести данные, пусть и с обработкой перед выводом, то выгоднее не использовать getCollection, а выбрать через fetchAll(PDO::FETCH_ASSOC), чтобы не создавать объекты. Конечная цель — массив с выбранными документами. TV можно выбрать вторым запросом, используя уже полученный массив, к нему же и присоединить результаты. Дальше уже в цикле обрабатываем и выводим.
я бы в данном случае migx использовал бы, так как все TV вроде однотипные, то по-моему проще из 22 одно, хоть и с JSON массивом сделать. Да и запрос лучше с JOIN-ом писать т.к. 1 запрос пусть и громоздкий лучше чем 1000. <?php $query = $modx->newQuery('modTemplateVarResource'); $query->innerJoin('modResource','modResource','modTemplateVarResource.contentid=modResource.id'); $query->where(array( 'modResource.parent' => 2, 'modResource.deleted'=> 0, 'modTemplateVarResource.tmplvarid'=>1 )); $Tv = $modx->getCollection('modTemplateVarResource',$query); foreach($Tv as $key){ print($key->get('value')); print(' || '); }
Чистая таблица с 10 полями, 1000 строк одновременного вывода сильнонагружает модкс, а тут 22 тв параметра это же с ума сойти… которые отдельно достаются. считай 700*22 это 14к+ запросов к базе. Вообще да, надо расширять modResource и почти все ТВ поля переносить в отдельную таблицу
разница в том, что памяти гораздо меньше используется. По крайней мере, уже на память можно будет не грешить. Ну и как вариант — расширить modResource. http://habrahabr.ru/post/253737/ Это точно поможет :)
Хм, а в чем преимущество, просто выбрать и вывести все ресурсы не проблема, а вот когда начинаешь с ТВ маятся все виснет пока ручками маюсь по одной ТВ а не сразу все 22, работает кое как.