Exception Опубликовано 8 апреля, 2020 Поделиться Опубликовано 8 апреля, 2020 Как вывести внутри самой записи список записей из категории другой базы? Почти похожее можно организовать блоком, выбрав там в плагинах Страница->Лента записи, и там дается выбор из какой категории выводить или из всех. Соответственно если применить такой метод то мне нужно будет уже внутри записи применять к этому блоку категорию из которой нужно вывести записи, что не возможно сделать, так как ни у кода {block='key'} нету дополнительных параметров, ни в шаблоне блока нельзя применять категорию. Как быть? Хочу что-то типа: Новость "Ccc" из категории "C1" находится в базе "C1", в ней нужно вывести список записей из категории "C2" базы "C2" и т.д. задать значение из какой категории будут выводиться эти записи нужно как-то кодом, внутри шаблона 'record', так как записей много метод вставки блока не подходит. Думал что-то типа такого: $categories[$cat_name]->records ($cat_name задать из доп. поля записи) и через foreach клипать записи, но не знаю даже как вызвать массив с категориями базы 😅 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Respected Опубликовано 8 апреля, 2020 Поделиться Опубликовано 8 апреля, 2020 Подозреваю, что должна помочь конструкция вида: {{$cats = \IPS\cms\Categories1::roots();}} Но это не точно 🙂 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 8 апреля, 2020 Автор Поделиться Опубликовано 8 апреля, 2020 9 часов назад, Respected сказал: Подозреваю, что должна помочь конструкция вида: {{$cats = \IPS\cms\Categories1::roots();}} Но это не точно 🙂 не очень помогла конструкция, в ней вроде как только категории\субкатегории и кол-ва записей. Нужно просто вывести из заданной в переменной $cats категории список последних 5-10 записей Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 9 апреля, 2020 Автор Поделиться Опубликовано 9 апреля, 2020 Где находится код блока "Страница->Лента записи", в базе где-то или где? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
andros0789 Опубликовано 9 апреля, 2020 Поделиться Опубликовано 9 апреля, 2020 То есть имеется 3 категории: - игры (id 1) -обзоры (id 2) -новости (id 3) Надо вывести в категории ИГРЫ блок с новостями из категории ОБЗОРЫ, в категории ОБЗОРЫ вывести блок с новостями из категории НОВОСТИ Так? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 9 апреля, 2020 Автор Поделиться Опубликовано 9 апреля, 2020 1 час назад, andros0789 сказал: То есть имеется 3 категории: - игры (id 1) -обзоры (id 2) -новости (id 3) Надо вывести в категории ИГРЫ блок с новостями из категории ОБЗОРЫ, в категории ОБЗОРЫ вывести блок с новостями из категории НОВОСТИ Так? Исходя из твоего примера у меня так: База (Новости) имеет категорию (Новости игры мафия), База (Игры) имеет категорию (Игры) и в ней записи, например запись "Мафия" и уже в этой записи отображается список с записями из базы (Новости) из категории (Новости игры мафия) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 10 апреля, 2020 Автор Поделиться Опубликовано 10 апреля, 2020 Не понял почему $record->container()->_title нельзя ни с чем сравнить? {{if $record->container()->_title == '2'}} даже если $record->container()->_title будет равен 2 то все равно покажет if скажет что значения разные? wtf? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 10 апреля, 2020 Автор Поделиться Опубликовано 10 апреля, 2020 Спустя несколько дней изучения исходного кода, исходных шаблонов, документации для разработчиков и изучения дополнительных знаний 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}} Таким образом блок выводит заданное кол-во записей из категории равной заголовку открытой записи. Можно искать и не только по заголовку, но у меня уже голова болит 😅 Приму и ваши варианты) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 11 апреля, 2020 Автор Поделиться Опубликовано 11 апреля, 2020 {{$records = \IPS\cms\Records1::load( 1 );}} Загружает 1 запись из базы данных, как загрузить все записи из базы данных? И как узнать название текущей категории в которой я нахожусь? Думал про \IPS\Request::i(); но максимум что от туда можно взять это url на котором я нахожусь Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 12 апреля, 2020 Автор Поделиться Опубликовано 12 апреля, 2020 Немного поняв механику понял, что блок ограничивает количество заранее загруженных записей полем "Количество для отображения", т.е. он загружает столько записей в массив, сколько указано в этом поле. Так же можно выполнить загрузку записей кодом {{$records = \IPS\cms\Records1::load( $id );}} - где $id - ид записи. Получается для того, чтобы найти нужную мне запись придется осуществить цикл for который будет перебирать этот $id до тех пор, пока не будет найдена нужная запись, а сам цикл будет перебирать записи заданное количество раз, например равное количеству записей имеющихся в базе. Так вот у меня теперь вопрос, если у меня в базе 100 или 1000 записей - не страшно. А если у меня в базе 100.000 записей, не повиснет ли страница от выполнения цикла 100.000 раз? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Respected Опубликовано 12 апреля, 2020 Поделиться Опубликовано 12 апреля, 2020 Как выглядит URL адрес необходимой записи? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 12 апреля, 2020 Автор Поделиться Опубликовано 12 апреля, 2020 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/ Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Respected Опубликовано 12 апреля, 2020 Поделиться Опубликовано 12 апреля, 2020 У тебя же во всех урлах присутствует ID записи. \IPS\Request::i()->id как раз будет применим для этих целей. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 12 апреля, 2020 Автор Поделиться Опубликовано 12 апреля, 2020 8 минут назад, Respected сказал: У тебя же во всех урлах присутствует ID записи. \IPS\Request::i()->id как раз будет применим для этих целей. как мне найти нужные записи только по ID? В первом варианте я вывожу запись используя цикл который сравнивает заголовок записи с названием категории где нужно вывести эту запись. Во втором варианте я сравниваю заголовок записи в которой нужно вывести записи "последние новости фильма" с названиями категорий новостей и вывожу найденные записи. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Respected Опубликовано 12 апреля, 2020 Поделиться Опубликовано 12 апреля, 2020 {{$id = \IPS\Request::i()->id;}} {{$data = \IPS\Db::i()->select( '*', 'cms_custom_database_1', "primary_id_field={$id}" )->first();}} Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 12 апреля, 2020 Автор Поделиться Опубликовано 12 апреля, 2020 2 минуты назад, Respected сказал: {{$id = \IPS\Request::i()->id;}} {{$data = \IPS\Db::i()->select( '*', 'cms_custom_database_1', "primary_id_field={$id}" )->first();}} да это понятно, но все равно ничего не даст, извлекая ID находясь в записи я не смогу найти по этому ID другие записи нужные мне для вывода. Я просто хочу сделать блок "последние новости" который будет выводить записи из другой базы Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 12 апреля, 2020 Автор Поделиться Опубликовано 12 апреля, 2020 Что более затратно по ресурсам - загрузить 10.000 записей в массив и искать в нем искомую строку, или перебирать циклом 10.000 записей и искать совпадение строки? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 12 апреля, 2020 Автор Поделиться Опубликовано 12 апреля, 2020 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 уже из второй строки? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Respected Опубликовано 13 апреля, 2020 Поделиться Опубликовано 13 апреля, 2020 Я не понимаю какая стоит задача. Вывести первые несколько записей из категории или что? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 13 апреля, 2020 Автор Поделиться Опубликовано 13 апреля, 2020 5 минут назад, Respected сказал: Я не понимаю какая стоит задача. Вывести первые несколько записей из категории или что? Имеется 2 базы: 1 База - Название: "Фильмы" в этой базе записи с фильмами, у записи заголовок = названию фильма, например запись с заголовком "Titanik" - в этой записи нужно сделать блок внизу записи "Последние новости фильма" в котором вывести 1-5 последних записей из базы 2 нужной категории. 2 База - Название: "Новости" в этой базе находятся записи с новостями фильмов. У категорий этой базы заголовки = названию заголовка записей из базы 1. Например есть категория с заголовком "Titanik" в этой категории записи новостей относятся к фильму "Titanik". Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Respected Опубликовано 13 апреля, 2020 Поделиться Опубликовано 13 апреля, 2020 Я бы сделал новости без категорий, а выборку новостей делать по тегам. Фильмов существует миллионы, ты же не будешь для каждого фильма делать отдельную категорию. У записей можно брать url таким образом: $record->record_dynamic_furl Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 13 апреля, 2020 Автор Поделиться Опубликовано 13 апреля, 2020 1 минуту назад, Respected сказал: Я бы сделал новости без категорий, а выборку новостей делать по тегам. Фильмов существует миллионы, ты же не будешь для каждого фильма делать отдельную категорию. что-то с этими всеми кодами совсем забыл про существование тегов, надо попробовать Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Respected Опубликовано 13 апреля, 2020 Поделиться Опубликовано 13 апреля, 2020 1 минуту назад, ZIKURIK сказал: что-то с этими всеми кодами совсем забыл про существование тегов, надо попробовать Самый оптимальный вариант в твоём случае. Ну или создать дополнительное поле - связь с базой данных. И при добавлении новости указывать фильм в поле. Так у новости и фильма появится явная связь. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.