Помогите придумать логику вывода материала

Главные вкладки

Аватар пользователя andreystrelkov andreystrelkov 12 февраля 2013 в 16:21

Здравствуйте товарищи, подскажите самое простейшее предложение
представьте что есть 1000 нод, у каждой ноды есть поле ВЫВЕСТИ НА ГЛАВНОЙ

есть вьюха, которая выводит ОДНУ новость на главной с фильтром поля ВЫВЕСТИ НА ГЛАВНОЙ, т.е. если он включён то выводит, нет включён - не выводит

необходимо сделать так, чтобы если я вдруг убираю пометку ВЫВЕСТИ НА ГЛАВНОЙ, он мне ничего тогда там не показывал, еслю включаю то показывал
вроде бы всё просто - а нет, получается если я поставлю у всех так этих новостей галочки - то убрав у одной - он покажет другую ROFL
т.е. нужно сделать чтобы эта галочка была УНИКАЛЬНОЙ и ЕДИНСТВЕННОЙ на все новости.

как это можно решить? Rules-ами? Smile при изменение ноды, путём ВКЛЮЧЕНИЯ логического поля ВЫВЕСТИ НА ГЛАВНОЙ, Loop-ом отключить у всех остальных новостей это поле?

Комментарии

Аватар пользователя andreystrelkov andreystrelkov 12 февраля 2013 в 17:03

дело в том, что, а если у меня таких помеченных нод 100 штук
он же следующую по очереди будет выводить

т.е. нужно так чтобы, если я убрал у ноды ВЫВОД, то чтобы он вообще ничего не показывал на этом месте, пока я какую нить другую не назначу на это место

Аватар пользователя BestFreelancer BestFreelancer 12 февраля 2013 в 17:15

Добавь новое поле "На главной" со значениями да/нет и пускай по умолчанию к примеру будет да. Через views выводи новости значение поля у которых да. Если потом нужно будет убрать все новости с главной, заходишь в настройки этого поля и ставишь по умолчанию НЕТ.

Конечно получается велосипед - но как вариант можно использовать

Аватар пользователя roman-yrv roman-yrv 12 февраля 2013 в 17:49

Можно сделать так.

1. Если у Вас "Главная" определена как тип контента, то к её полям можно добавить одно поле типа Node Reference, в котором бы хранилась ссылка на новость, которую нужно в данный момент выводить на главной. И всё. В этом случае не нужно определять для каждой новости галочку.

2. Можно сделать так. Пусть каждая новость имеет тип поля "Выводить на главной". И в своем модуле перехватить хук hook_node_presave, которые бы отслеживали, что если у сохраняемой новости данная галочка установлена, то у остальных новостей эту галочку убирать. Но это решение, считаю, не совсем правильное - много лишней информации.

3. Можно где-нибудь в настройках темы выбирать новость на главной из списка, а nid сохранять, к примеру, в переменных. В новостях "галочки" в этом случае не нужны.

4. Можно загрузить модуль nodequeue, добавить туда очередь - "Новости на главной" и добавить в неё одну новость. А дальше с помощью views получать эту новость. В новостях "галочки" в этом случае не нужны.

Аватар пользователя andreystrelkov andreystrelkov 12 февраля 2013 в 18:12

Большое вам спасибо за все советы, не думал что столько вариантов будет, а некоторые сложные
но я написал вам очень утрировано мою задачу, т.к. думал всё проще можно будет сделать.

Т.к. на самом деле, если писать полностью, то у меня есть один тип материала - НОВОСТИ,в котором будет полно нод, в этом типе есть поле типа СПИСОК,
в котором 3 значения РАЗМЕСТИТЬ В ЛЕВОМ САЙДБАРЕ, РАЗМЕСТИТЬ В ПРАВОМ САЙДБАРЕ и НЕ РАЗМЕЩАТЬ НИ В ОДНОМ.
есть 2 вьюхи (аналогичные друг другу) на каждый сайдбар, в одной выводится ОДНА нода которая имеет значение поля РАЗМЕСТИТЬ В ЛЕВОМ, и соответственное другая со значением В ПРАВОМ.

получается мне этим значением поля нужно назначать какая из 100500 новостей будет выводиться в ЛЕВОМ, а какая в ПРАВОМ.

получается, допустим я создаю 10 нод, и во всех по умолчанию значение НЕ РАЗМЕЩАТЬ НИ В ОДНОМ, => мои вьюхи пустые и ничего не показывают т.е. всё правильно.
далее я добавляю следующую новость и указываю что В ЛЕВОМ, вьюха - показывает её, молодец
ещё раз добавляю новость и снова говорю что В ЛЕВОМ, по идее по умолчанию с помощью сортировки вьюха предыдущую не покажет, т.к. она второй уже идёт, а мы показываем только 1 самую, вроде бы всё верно и работает, показывает только что созданную ноду...

НО! если сейчас в друг зайти в эту же только что созданную новость и поменять значение на НЕ РАЗМЕЩАТЬ, то он её не покажет на вьюхе, но он покажет предыдущую, т.к. она то тоже имеет ещё с того раза значению В ЛЕВОМ
а не надо её показывать.

ой как сложно всё это писать и не факт что внятно описываю, я решил не париться и сделать рулзой, но что то подзабыл уже как с ней работать

как я делаю

EVENT - Перед сохранением материала
CONDITION - Entity has field - РАСПОЛОЖЕНИЕ НА ГЛАВНОЙ (поле)
Data comparsion = В ЛЕВОМ (значение)

и вот дальше по идее нужно запустить другую рулзу, задача которой будет штудировать все ноды типа НОВОСТИ, и у которых значение поля В ЛЕВОМ - поставить значение НЕ РАЗМЕЩАТЬ (почему нельзя в этой же рулзе, потому что он таким образом затерёт значение даже у тех, которых трогать нельзя, т.е. со значением В ПРАВОМ, ведь мне нужно только пока с левым разобраться)

но не могу найти ACTION - Запустить другую рулзу (а бы ли он такой? Smile )

CONDITION - Entity has field - РАСПОЛОЖЕНИЕ НА ГЛАВНОЙ
Data comparsion = В ЛЕВОМ
ACTION - и вот с теми нодами которые соответствую выше указаными CONDITION-ами котором нужно добавить LOOP - который я совсем не умею пользоваться, чтобы он сделал SET DATA VALUE - НЕ РАЗМЕЩАТЬ.

зачем я делаю такой функционал, ведь можно было проще, тупо отключить что нить от показа вообще (вьюху) и ещё чё - увы делаю можно сказать для тупых людей, чтобы всё само без их участия можно сказать, ибо могу дел натворить

Аватар пользователя roman-yrv roman-yrv 12 февраля 2013 в 18:21

Так, может, Вам действительно проще задать тип материала "Главная страница" - и там задать 2 поля типа Node Reference - "Новость в левом сайдбаре" и "Новость в правом сайдбаре" ?

И дальше можно вообще не заморачиваться с views, а при темизации главной страницы просто вытаскивать их nid и руками рендерить поля ?

Аватар пользователя Anton1 Anton1 13 февраля 2013 в 5:13

Не понимаю логику людей, ладно ТС новичок.

Задача в одном места надо вывести новость. Значит в одном месте надо указать nid и выводить филды. Нафиг, что то навешивать на ноду! Делать какие то доп поля и.т.д... Завтра понадобится ещё в 3х местах вывести, ещё полей у ноды создадите? А потом стоны что все тормозит... Может хватит уже микроскопом гвозди забивать и главное другим это же советовать!

Аватар пользователя Anton1 Anton1 13 февраля 2013 в 20:08

Естественно, у вас ведь задача вывести одну конкретную ноду, потом её заменить на другую. Вьюхой это сделано или вы сниппет/модуль напишите, это уже дело 10е.

Аватар пользователя roman-yrv roman-yrv 13 февраля 2013 в 20:23

Дополнительное поле будет создано на одной странице и в единственном экземпляре - для удобства редактора сайта.
Ему ведь легче зайти в настройки главной страницы и выбрать в этом доп. поле новость из списка новостей (или из автодополняемого текстового поля), чем вручную прописывать куда-то nid этой новости.

Аватар пользователя iNFerNo iNFerNo 13 февраля 2013 в 8:57

да да нужно вывести одну конкретную ноду Id во вьюхе фильтруем или в блоке выводим ссылку на эту ноду...

Аватар пользователя Chyvakoff Chyvakoff 13 февраля 2013 в 9:50

"andreystrelkov" wrote:
у меня таких помеченных нод 100 штук

"andreystrelkov" wrote:
пока я какую нить другую не назначу на это место

На какое её место? куча из ста нод, убираем одну,мешаем-мешаем,добавляем одну - где наша нода на нужном месте? И где оно, место?

Аватар пользователя andreystrelkov andreystrelkov 13 февраля 2013 в 21:24

Дело в том что, как я ранее и писал, наполнение будут заниматься так сказать тёти Вали дяди Сергеи, которые как правило глупые =), и они будут что то вроде редакторами с небольшим наделением прав