vinegredz Posted January 23, 2019 Share Posted January 23, 2019 Здравствуйте. Ранее интересовался как выводить связанные записи. Выяснилось, что этот способ не подойдет, потому что для ранее созданных записей (до внесения настроек) нужно создавать заново заново, а у меня их очень много. Осталось единственное гуманное (как мне кажется решение). Выводит на странице записи из другой базы данных, у которых в нужно мне поле, нужно мне значение. Ситуация такая же: 1. База данных Актеры (1) и поле типа "Database Relationship" с названием Films.2. База данных Фильмы (2) и поле типа "Database Relationship" с названием Actor.3. Знаю как вывести ID записи {$record->_id} в шаблоне record Теперь нужно вывести на странице Актера фильмы в которых он участвовал. Логика такая: 1. Получить список записей (фильмов) из базы данных 22. Отсортировать те, у которых value в поле Actor содержит _id записи актера3. Вывести результаты через шаблон record_row Пытался адаптировать шаблон RecordFeed, но он сложнее те знаний, что у меня есть. Напрямую его перенести в шаблон record не получится.Пытался адаптировать конструкцию, которая вывод количество записей в конкретной базе данных: {expression="\IPS\Db::i()->select( 'COUNT(*)', 'cms_custom_database_2', array( 'record_future_date=? and record_approved=?', 0, 1 ) )->first()"} Но методом тыка не получилось, а найти описание зачем нужный каждый элемент не получилось. Шаманил с шаблоном: {template="$table->rowsTemplate[1]" params="$table, $headers, $rows" object="$table->rowsTemplate[0]"} Но понял, что в шаблоне record просто нет самой главной переменной $table, а как ее объявить не разобрался. Кто может подсказать универсальную конструкцию, которая позволит вывести записи из базы данных CMS с фильтром с понятной мне логикой работы if/else в любом месте сайта, без привязке к объявляемым переменным. IPB 4.3.6 Спасибо за любые подсказки, которые сэкономят время) Link to comment Share on other sites More sharing options...
Dmitriy427 Posted January 23, 2019 Share Posted January 23, 2019 Допустим поле field_3, в таблице фильмов (cms_custom_database_2) у Вас содержит ID актёров, через запятую. Тогда можно сделать так:{{$films = \IPS\Db::i()->select( '*', 'cms_custom_database_2', "FIND_IN_SET( {$record->_id}, field_3 )" );}} {{if count( $films )}} <ol class='ipsDataList ipsDataList_zebra ipsClear'> {{foreach $films as $film}} <li class='ipsDataItem'> {$film['field_1']} </li> {{endforeach}} </ol> {{endif}} 1 Link to comment Share on other sites More sharing options...
vinegredz Posted January 24, 2019 Author Share Posted January 24, 2019 Спасибо это работает и на страницу действительно выводится часть информации из записи об Актере. Далее я хочу подключить шаблон recordRow, который используется у меня в базе данных Актеров. Вот мой порядок размышлений: // Записываем в переменную $faces массив, внутри которого ID актеров из поля ID7 {{$faces = \IPS\Db::i()->select( '*', 'cms_custom_database_2', "FIND_IN_SET( {$record->_id}, field_7 )" );}} // Если поле ID7 не пустое, то... {{if count( $faces )}} <ol class='faceMasonry'> // Запускаем цикл, который перебирает массив. Источник $faces. Ключ записи в $fieldId, значения в $items {{foreach $faces as $fieldId => $items}} // Подключаем шаблон и добавляем туда источник данных $items {template="recordRow" group="face_listing" location="database" app="cms" themeClass="IPS\cms\Theme" params="null, null, $items"} {{endforeach}} </ol> {{else}} // Если поле ID7 пустое, то... {{endif}} Я так же понимаю, что не просто так мы обращаемся к данным не через customFieldDisplayByKey('platform_id'), а $items['field_34'], но почему? Такое ощущение, что в массиве $faces хранятся только данные из поля ID7, а не все внутренности записи. Link to comment Share on other sites More sharing options...
newbie Posted January 24, 2019 Share Posted January 24, 2019 Далее я хочу подключить шаблон recordRow,Смотрим параметры шаблона$table, $headers, $rowsПри этом $rows - массив объектов {{$faces = iterator_to_array(new \IPS\Patterns\ActiveRecordIterator(\IPS\Db::i()->select( '*', 'cms_custom_database_2', "FIND_IN_SET( $record->_id, field_7 )" ), 'IPS\cms\Records2'));}} {{if count( $faces )}} <ol class='faceMasonry'> {template="recordRow" group="face_listing" location="database" app="cms" themeClass="IPS\cms\Theme" params="null, null, $faces"} </ol> {{else}} // Если поле ID7 пустое, то... {{endif}} Link to comment Share on other sites More sharing options...
vinegredz Posted January 24, 2019 Author Share Posted January 24, 2019 Видимо только $faces не хватает. Какие-то записи выгружается, но: 1. Во всех записях нет информации из полей (даже _title)2. Кажется выводится записей больше, чем есть на самом деле записей с нужным id в field_7, проверить не могу, так как см. п.13. Гости видят даже те записи, что на модерации Еще пытался создать пагинацию, для которой нужна $table (эта переменная также нужна и для recordRow). Как ее объявить? Из всего кода, что есть в стандартном шаблоне темы (не шаблон базы данных, а именно темы), я не нашел примера, как эту переменную объявить. Подразумевается, что она уже просто есть. Link to comment Share on other sites More sharing options...
newbie Posted January 24, 2019 Share Posted January 24, 2019 1. Во всех записях нет информации из полей (даже _title)2. Кажется выводится записей больше, чем есть на самом деле записей с нужным id в field_7, проверить не могу, так как см. п.1Поправил пост3. Гости видят даже те записи, что на модерацииКакие даны данные в "where", такие записи и выводятся.Еще пытался создать пагинацию, для которой нужна $tableПагинация не зависит от таблицы(эта переменная также нужна и для recordRow)Зачем? В указанном шаблоне она используется в 2 местах и особой роли не играет. Link to comment Share on other sites More sharing options...
vinegredz Posted January 24, 2019 Author Share Posted January 24, 2019 Пагинация нужна, потому что предоставленный вам пример кода (который работает!) я использую в шаблоне record. Там нет пагинации. А если на странице 100 записей, то все виснуть страшно начинает. Link to comment Share on other sites More sharing options...
Dmitriy427 Posted January 24, 2019 Share Posted January 24, 2019 Пагинация нужнаНужна, делайте. В IPS4 это не очень сложно - есть универсальный шаблон, есть куча образцов для создания запроса к базе с указанием смещения и лимита... И есть у меня ощущение, что Вы сейчас не подсказок хотите, а готовый, не самый простой блок, на халяву выпрашиваете. 1 Link to comment Share on other sites More sharing options...
vinegredz Posted January 24, 2019 Author Share Posted January 24, 2019 Обычно с newbie работаю, но он сейчас занят. Вот и ищу поддержки здесь) Dmitriy427 помогли значительно, благодарю. Link to comment Share on other sites More sharing options...
newbie Posted January 25, 2019 Share Posted January 25, 2019 Простой вариант таблицы с пагинацией. {{$table = new \IPS\Helpers\Table\Content('IPS\cms\Records2', $record->url(), array(array(\IPS\Db::i()->findInSet('field_7', array($record->_id)))));}} {{$table->rowsTemplate = array(\IPS\cms\Theme::i()->getTemplate('face_listing', 'cms', 'database'), 'recordRow');}} {$table|raw} 1 Link to comment Share on other sites More sharing options...
vinegredz Posted February 6, 2019 Author Share Posted February 6, 2019 Спасибо за готовый код. Таблица действительно формируется и фильтрация действительно корректная, но не работает пагинация (хотя она тоже выводится). Жмешь на любую страницу кроме первой и загружается всё равно первая страница. На другие перейти не возможно. Link to comment Share on other sites More sharing options...
newbie Posted February 6, 2019 Share Posted February 6, 2019 Используйте другое значение для paginationKey{{$table = new \IPS\Helpers\Table\Content('IPS\cms\Records2', $record->url(), array(array(\IPS\Db::i()->findInSet('field_7', array($record->_id)))));}} {{$table->rowsTemplate = array(\IPS\cms\Theme::i()->getTemplate('face_listing', 'cms', 'database'), 'recordRow');}} {{$table->paginationKey = 'fpage';}} {$table|raw} Link to comment Share on other sites More sharing options...
vinegredz Posted February 6, 2019 Author Share Posted February 6, 2019 Теперь страницы переключаются, но все, кроме первой, пустые. Link to comment Share on other sites More sharing options...
newbie Posted February 6, 2019 Share Posted February 6, 2019 Если обновить 2-ю страницу (F5), записи есть? Link to comment Share on other sites More sharing options...
vinegredz Posted February 6, 2019 Author Share Posted February 6, 2019 Нет, записи не появляются. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now