Posted 8 апреля, 20204 yr comment_161507 Как вывести внутри самой записи список записей из категории другой базы? Почти похожее можно организовать блоком, выбрав там в плагинах Страница->Лента записи, и там дается выбор из какой категории выводить или из всех. Соответственно если применить такой метод то мне нужно будет уже внутри записи применять к этому блоку категорию из которой нужно вывести записи, что не возможно сделать, так как ни у кода {block='key'} нету дополнительных параметров, ни в шаблоне блока нельзя применять категорию. Как быть? Хочу что-то типа: Новость "Ccc" из категории "C1" находится в базе "C1", в ней нужно вывести список записей из категории "C2" базы "C2" и т.д. задать значение из какой категории будут выводиться эти записи нужно как-то кодом, внутри шаблона 'record', так как записей много метод вставки блока не подходит. Думал что-то типа такого: $categories[$cat_name]->records ($cat_name задать из доп. поля записи) и через foreach клипать записи, но не знаю даже как вызвать массив с категориями базы 😅
8 апреля, 20204 yr comment_161508 Подозреваю, что должна помочь конструкция вида: {{$cats = \IPS\cms\Categories1::roots();}} Но это не точно 🙂
8 апреля, 20204 yr Author comment_161526 9 часов назад, Respected сказал: Подозреваю, что должна помочь конструкция вида: {{$cats = \IPS\cms\Categories1::roots();}} Но это не точно 🙂 не очень помогла конструкция, в ней вроде как только категории\субкатегории и кол-ва записей. Нужно просто вывести из заданной в переменной $cats категории список последних 5-10 записей
9 апреля, 20204 yr Author comment_161536 Где находится код блока "Страница->Лента записи", в базе где-то или где?
9 апреля, 20204 yr comment_161537 То есть имеется 3 категории: - игры (id 1) -обзоры (id 2) -новости (id 3) Надо вывести в категории ИГРЫ блок с новостями из категории ОБЗОРЫ, в категории ОБЗОРЫ вывести блок с новостями из категории НОВОСТИ Так?
9 апреля, 20204 yr Author comment_161539 1 час назад, andros0789 сказал: То есть имеется 3 категории: - игры (id 1) -обзоры (id 2) -новости (id 3) Надо вывести в категории ИГРЫ блок с новостями из категории ОБЗОРЫ, в категории ОБЗОРЫ вывести блок с новостями из категории НОВОСТИ Так? Исходя из твоего примера у меня так: База (Новости) имеет категорию (Новости игры мафия), База (Игры) имеет категорию (Игры) и в ней записи, например запись "Мафия" и уже в этой записи отображается список с записями из базы (Новости) из категории (Новости игры мафия)
10 апреля, 20204 yr Author comment_161557 Не понял почему $record->container()->_title нельзя ни с чем сравнить? {{if $record->container()->_title == '2'}} даже если $record->container()->_title будет равен 2 то все равно покажет if скажет что значения разные? wtf?
10 апреля, 20204 yr Author comment_161562 Спустя несколько дней изучения исходного кода, исходных шаблонов, документации для разработчиков и изучения дополнительных знаний php, я все же собрал рабочий вариант кода. Как и предполагалось код маленький и достаточно простой, но не знание некоторых тонкостей не дало возможности его написания. Все работает внутри созданного шаблона блока "Лента записей" с пометкой "все категории" для базы из которой будем брать записи: <!-- Проверяем есть ли записи - пустая ли переменная $records --> {{if !empty( $records ) }} <h3 class='ipsWidget_title ipsType_reset'>{$title}</h3> <div class='ipsPad_half ipsWidget_inner'> <ul class='ipsDataList ipsDataList_reducedSpacing ipsContained_container'> <!-- Записываем путь до записи используя ID открытой базы --> {{$me_lastnews = '\IPS\cms\Records'.\IPS\cms\Databases\Dispatcher::i()->databaseId;}} <!-- Загружаем запись используя ID открытой записи--> {{$me_lastnews = $me_lastnews::load(\IPS\cms\Databases\Dispatcher::i()->recordId);}} <!-- В моем случае я получаю первое значение "Заголовок записи" из массива загруженной записи, по нему и буду искать категории нужных записей --> {{$first = current($me_lastnews);}} <!-- Перебираем массив всех записей --> {{foreach $records as $record}} <!-- Так как я не смог использовать имя категории записи на прямую (возможно из-за того, что используется protected класса), получаем доступ ко всем свойствам объектов массива со всеми записями --> {{$recordz = (array) $record;}} <!-- Перебираем новый массив --> {{foreach $recordz as $recordzz}} <!-- Ищем и выводим только те записи, которые имеют соответствие с $first - Заголовком открытой записи --> {{if $recordzz->name == $first.','}} <li class='ipsDataItem'> <div class='ipsDataItem_icon ipsPos_top'> {template="userPhoto" group="global" app="core" params="$record->author(), 'tiny'"} </div> <div class='ipsDataItem_main cWidgetComments'> <div class="ipsCommentCount ipsPos_right {{if ( $record->record_comments ) === 0}}ipsFaded{{endif}}" data-ipsTooltip title='{lang="num_replies" pluralize="$record->record_comments"}'>{expression="$record->record_comments"}</div> <div class='ipsType_break ipsContained'> <a href="{$record->url()->setQueryString( 'do', 'getLastComment' )}" title='{lang="view_this_cmsrecord" sprintf="\IPS\Member::loggedIn()->language()->addToStack( 'content_db_lang_sl_' . $record::$customDatabaseId, FALSE ), $record->_title"}' class='ipsDataItem_title'>{$record->_title}</a> </div> <p class='ipsType_reset ipsType_medium ipsType_blendLinks'> <span>{lang="byline_nodate" htmlsprintf="$record->author()->link()"}</span><br> <span class="ipsType_light">{datetime="$record->mapped('date')"}</span> </p> </div> </li> {{else}} <!-- Если нет совпадений, записываем 0 в переменную --> {{$error = 0;}} {{endif}} {{endforeach}} {{endforeach}} <!-- Если в переменной 0 выводим текст --> {{if $error == 0}}<p>Новостей по записи {$first} не найдено</p>{{endif}} {{endif}} Таким образом блок выводит заданное кол-во записей из категории равной заголовку открытой записи. Можно искать и не только по заголовку, но у меня уже голова болит 😅 Приму и ваши варианты)
11 апреля, 20204 yr Author comment_161571 {{$records = \IPS\cms\Records1::load( 1 );}} Загружает 1 запись из базы данных, как загрузить все записи из базы данных? И как узнать название текущей категории в которой я нахожусь? Думал про \IPS\Request::i(); но максимум что от туда можно взять это url на котором я нахожусь
12 апреля, 20204 yr Author comment_161574 Немного поняв механику понял, что блок ограничивает количество заранее загруженных записей полем "Количество для отображения", т.е. он загружает столько записей в массив, сколько указано в этом поле. Так же можно выполнить загрузку записей кодом {{$records = \IPS\cms\Records1::load( $id );}} - где $id - ид записи. Получается для того, чтобы найти нужную мне запись придется осуществить цикл for который будет перебирать этот $id до тех пор, пока не будет найдена нужная запись, а сам цикл будет перебирать записи заданное количество раз, например равное количеству записей имеющихся в базе. Так вот у меня теперь вопрос, если у меня в базе 100 или 1000 записей - не страшно. А если у меня в базе 100.000 записей, не повиснет ли страница от выполнения цикла 100.000 раз?
12 апреля, 20204 yr Author comment_161577 2 минуты назад, Respected сказал: Как выглядит URL адрес необходимой записи? В одном варианте я ищу только 1 запись, URL имеет вид http://site.ru/films/all_films/nazvanie-filma-r100/ - для вывода в базе новостей, что-то по типу "по этой категории новостей найден фильм такой-то" и вывожу найденную запись. Во втором варианте я на странице записи этого фильма http://site.ru/films/all_films/nazvanie-filma-r100/ вывожу блок "последние новости фильма" где нужно перебрать все записи из базы новостей и найти нужные, там новости имеют и категории и под категории например: /news/horror/alt/nazvanie-novosti-r13/
12 апреля, 20204 yr comment_161578 У тебя же во всех урлах присутствует ID записи. \IPS\Request::i()->id как раз будет применим для этих целей.
12 апреля, 20204 yr Author comment_161579 8 минут назад, Respected сказал: У тебя же во всех урлах присутствует ID записи. \IPS\Request::i()->id как раз будет применим для этих целей. как мне найти нужные записи только по ID? В первом варианте я вывожу запись используя цикл который сравнивает заголовок записи с названием категории где нужно вывести эту запись. Во втором варианте я сравниваю заголовок записи в которой нужно вывести записи "последние новости фильма" с названиями категорий новостей и вывожу найденные записи.
12 апреля, 20204 yr comment_161580 {{$id = \IPS\Request::i()->id;}} {{$data = \IPS\Db::i()->select( '*', 'cms_custom_database_1', "primary_id_field={$id}" )->first();}}
12 апреля, 20204 yr Author comment_161581 2 минуты назад, Respected сказал: {{$id = \IPS\Request::i()->id;}} {{$data = \IPS\Db::i()->select( '*', 'cms_custom_database_1', "primary_id_field={$id}" )->first();}} да это понятно, но все равно ничего не даст, извлекая ID находясь в записи я не смогу найти по этому ID другие записи нужные мне для вывода. Я просто хочу сделать блок "последние новости" который будет выводить записи из другой базы
12 апреля, 20204 yr Author comment_161589 Что более затратно по ресурсам - загрузить 10.000 записей в массив и искать в нем искомую строку, или перебирать циклом 10.000 записей и искать совпадение строки?
12 апреля, 20204 yr Author comment_161594 16 часов назад, Respected сказал: {{$id = \IPS\Request::i()->id;}} {{$data = \IPS\Db::i()->select( '*', 'cms_custom_database_1', "primary_id_field={$id}" )->first();}} Как мне осуществить перебор ID которые находятся в primary_id_field? т.е. получаю ID из primary_id_field первой строки таблицы cms_custom_database_1, если он мне подходит, оставляю, если нет, получают ID уже из второй строки?
13 апреля, 20204 yr comment_161596 Я не понимаю какая стоит задача. Вывести первые несколько записей из категории или что?
13 апреля, 20204 yr Author comment_161598 5 минут назад, Respected сказал: Я не понимаю какая стоит задача. Вывести первые несколько записей из категории или что? Имеется 2 базы: 1 База - Название: "Фильмы" в этой базе записи с фильмами, у записи заголовок = названию фильма, например запись с заголовком "Titanik" - в этой записи нужно сделать блок внизу записи "Последние новости фильма" в котором вывести 1-5 последних записей из базы 2 нужной категории. 2 База - Название: "Новости" в этой базе находятся записи с новостями фильмов. У категорий этой базы заголовки = названию заголовка записей из базы 1. Например есть категория с заголовком "Titanik" в этой категории записи новостей относятся к фильму "Titanik".
13 апреля, 20204 yr comment_161599 Я бы сделал новости без категорий, а выборку новостей делать по тегам. Фильмов существует миллионы, ты же не будешь для каждого фильма делать отдельную категорию. У записей можно брать url таким образом: $record->record_dynamic_furl
13 апреля, 20204 yr Author comment_161600 1 минуту назад, Respected сказал: Я бы сделал новости без категорий, а выборку новостей делать по тегам. Фильмов существует миллионы, ты же не будешь для каждого фильма делать отдельную категорию. что-то с этими всеми кодами совсем забыл про существование тегов, надо попробовать
13 апреля, 20204 yr comment_161601 1 минуту назад, ZIKURIK сказал: что-то с этими всеми кодами совсем забыл про существование тегов, надо попробовать Самый оптимальный вариант в твоём случае. Ну или создать дополнительное поле - связь с базой данных. И при добавлении новости указывать фильм в поле. Так у новости и фильма появится явная связь.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.