Jump to content

список записей категории в записи

Featured Replies

Posted
comment_161507

Как вывести внутри самой записи список записей из категории другой базы?

Почти похожее можно организовать блоком, выбрав там в плагинах Страница->Лента записи, и там дается выбор из какой категории выводить или из всех. Соответственно если применить такой метод то мне нужно будет уже внутри записи применять к этому блоку категорию из которой нужно вывести записи, что не возможно сделать, так как ни у кода {block='key'} нету дополнительных параметров, ни в шаблоне блока нельзя применять категорию. Как быть?

Хочу что-то типа:

Новость "Ccc" из категории "C1" находится в базе "C1", в ней нужно вывести список записей из категории "C2" базы "C2" и т.д. задать значение из какой категории будут выводиться эти записи нужно как-то кодом, внутри шаблона 'record', так как записей много метод вставки блока не подходит.

Думал что-то типа такого: $categories[$cat_name]->records ($cat_name задать из доп. поля записи) и через foreach клипать записи, но не знаю даже как вызвать массив с категориями базы 😅

comment_161508

Подозреваю, что должна помочь конструкция вида:

{{$cats = \IPS\cms\Categories1::roots();}}

Но это не точно 🙂

  • Author
comment_161526
9 часов назад, Respected сказал:

Подозреваю, что должна помочь конструкция вида:


{{$cats = \IPS\cms\Categories1::roots();}}

Но это не точно 🙂

не очень помогла конструкция, в ней вроде как только категории\субкатегории и кол-ва записей. Нужно просто вывести из заданной в переменной $cats категории список последних 5-10 записей

comment_161537

То есть имеется 3 категории:
- игры (id 1)

-обзоры (id 2)

-новости (id 3)

Надо вывести в категории ИГРЫ блок с новостями из категории ОБЗОРЫ, в категории ОБЗОРЫ вывести блок с новостями из категории НОВОСТИ
Так?

  • Author
comment_161539
1 час назад, andros0789 сказал:

То есть имеется 3 категории:
- игры (id 1)

-обзоры (id 2)

-новости (id 3)

Надо вывести в категории ИГРЫ блок с новостями из категории ОБЗОРЫ, в категории ОБЗОРЫ вывести блок с новостями из категории НОВОСТИ
Так?

Исходя из твоего примера у меня так: База (Новости) имеет категорию (Новости игры мафия), База (Игры) имеет категорию (Игры) и в ней записи, например запись "Мафия" и уже в этой записи отображается список с записями из базы (Новости) из категории (Новости игры мафия)

  • Author
comment_161557

Не понял почему  $record->container()->_title нельзя ни с чем сравнить? {{if $record->container()->_title == '2'}} даже если $record->container()->_title будет равен 2 то все равно покажет if скажет что значения разные? wtf?

  • 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}}

 

Таким образом блок выводит заданное кол-во записей из категории равной заголовку открытой записи. Можно искать и не только по заголовку, но у меня уже голова болит 😅

Приму и ваши варианты)

  • Author
comment_161571
{{$records = \IPS\cms\Records1::load( 1 );}}

Загружает 1 запись из базы данных, как загрузить все записи из базы данных?

И как узнать название текущей категории в которой я нахожусь? Думал про \IPS\Request::i(); но максимум что от туда можно взять это url на котором я нахожусь

  • Author
comment_161574

Немного поняв механику понял, что блок ограничивает количество заранее загруженных записей полем "Количество для отображения", т.е. он загружает столько записей в массив, сколько указано в этом поле.
Так же можно выполнить загрузку записей кодом {{$records = \IPS\cms\Records1::load( $id );}} - где $id - ид записи.
Получается для того, чтобы найти нужную мне запись придется осуществить цикл for который будет перебирать этот $id до тех пор, пока не будет найдена нужная запись, а сам цикл будет перебирать записи заданное количество раз, например равное количеству записей имеющихся в базе.
Так вот у меня теперь вопрос, если у меня в базе 100 или 1000 записей - не страшно. А если у меня в базе 100.000 записей, не повиснет ли страница от выполнения цикла 100.000 раз?

  • 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/

comment_161578

У тебя же во всех урлах присутствует ID записи. \IPS\Request::i()->id как раз будет применим для этих целей.

  • Author
comment_161579
8 минут назад, Respected сказал:

У тебя же во всех урлах присутствует ID записи. \IPS\Request::i()->id как раз будет применим для этих целей.

как мне найти нужные записи только по ID? В первом варианте я вывожу запись используя цикл который сравнивает заголовок записи с названием категории где нужно вывести эту запись. Во втором варианте я сравниваю заголовок записи в которой нужно вывести записи "последние новости фильма" с названиями категорий новостей и вывожу найденные записи.

comment_161580
{{$id = \IPS\Request::i()->id;}}
{{$data = \IPS\Db::i()->select( '*', 'cms_custom_database_1', "primary_id_field={$id}" )->first();}}

 

  • 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 другие записи нужные мне для вывода. Я просто хочу сделать блок "последние новости" который будет выводить записи из другой базы

  • Author
comment_161589

Что более затратно по ресурсам - загрузить 10.000 записей в массив и искать в нем искомую строку, или перебирать циклом 10.000 записей и искать совпадение строки?

  • 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 уже из второй строки?

comment_161596

Я не понимаю какая стоит задача. Вывести первые несколько записей из категории или что?

  • Author
comment_161598
5 минут назад, Respected сказал:

Я не понимаю какая стоит задача. Вывести первые несколько записей из категории или что?

Имеется 2 базы:

1 База - Название: "Фильмы" в этой базе записи с фильмами, у записи заголовок = названию фильма, например запись с заголовком "Titanik" - в этой записи нужно сделать блок внизу записи "Последние новости фильма" в котором вывести 1-5 последних записей из базы 2 нужной категории.

2 База - Название: "Новости" в этой базе находятся записи с новостями фильмов. У категорий этой базы заголовки = названию заголовка записей из базы 1. Например есть категория с заголовком "Titanik" в этой категории записи новостей относятся к фильму "Titanik".

comment_161599

Я бы сделал новости без категорий, а выборку новостей делать по тегам. Фильмов существует миллионы, ты же не будешь для каждого фильма делать отдельную категорию.

У записей можно брать url таким образом: $record->record_dynamic_furl

  • Author
comment_161600
1 минуту назад, Respected сказал:

Я бы сделал новости без категорий, а выборку новостей делать по тегам. Фильмов существует миллионы, ты же не будешь для каждого фильма делать отдельную категорию.

что-то с этими всеми кодами совсем забыл про существование тегов, надо попробовать

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.


Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.