Здравствуйте товарищи, подскажите самое простейшее предложение
представьте что есть 1000 нод, у каждой ноды есть поле ВЫВЕСТИ НА ГЛАВНОЙ
есть вьюха, которая выводит ОДНУ новость на главной с фильтром поля ВЫВЕСТИ НА ГЛАВНОЙ, т.е. если он включён то выводит, нет включён - не выводит
необходимо сделать так, чтобы если я вдруг убираю пометку ВЫВЕСТИ НА ГЛАВНОЙ, он мне ничего тогда там не показывал, еслю включаю то показывал
вроде бы всё просто - а нет, получается если я поставлю у всех так этих новостей галочки - то убрав у одной - он покажет другую
т.е. нужно сделать чтобы эта галочка была УНИКАЛЬНОЙ и ЕДИНСТВЕННОЙ на все новости.
как это можно решить? Rules-ами? при изменение ноды, путём ВКЛЮЧЕНИЯ логического поля ВЫВЕСТИ НА ГЛАВНОЙ, Loop-ом отключить у всех остальных новостей это поле?
Комментарии
Сделай очередь на одну ноду. И выводи вьюсом то что в этой очереди.
Если правильно понял, то нужно выводить в отдельном блоке через вьюс
дело в том, что, а если у меня таких помеченных нод 100 штук
он же следующую по очереди будет выводить
т.е. нужно так чтобы, если я убрал у ноды ВЫВОД, то чтобы он вообще ничего не показывал на этом месте, пока я какую нить другую не назначу на это место
Добавь новое поле "На главной" со значениями да/нет и пускай по умолчанию к примеру будет да. Через views выводи новости значение поля у которых да. Если потом нужно будет убрать все новости с главной, заходишь в настройки этого поля и ставишь по умолчанию НЕТ.
Конечно получается велосипед - но как вариант можно использовать
Включая-выключая блок видимость материала. Вьюс для сортировки и количества выводимых нод.
Можно сделать так.
1. Если у Вас "Главная" определена как тип контента, то к её полям можно добавить одно поле типа Node Reference, в котором бы хранилась ссылка на новость, которую нужно в данный момент выводить на главной. И всё. В этом случае не нужно определять для каждой новости галочку.
2. Можно сделать так. Пусть каждая новость имеет тип поля "Выводить на главной". И в своем модуле перехватить хук hook_node_presave, которые бы отслеживали, что если у сохраняемой новости данная галочка установлена, то у остальных новостей эту галочку убирать. Но это решение, считаю, не совсем правильное - много лишней информации.
3. Можно где-нибудь в настройках темы выбирать новость на главной из списка, а nid сохранять, к примеру, в переменных. В новостях "галочки" в этом случае не нужны.
4. Можно загрузить модуль nodequeue, добавить туда очередь - "Новости на главной" и добавить в неё одну новость. А дальше с помощью views получать эту новость. В новостях "галочки" в этом случае не нужны.
Большое вам спасибо за все советы, не думал что столько вариантов будет, а некоторые сложные
но я написал вам очень утрировано мою задачу, т.к. думал всё проще можно будет сделать.
Т.к. на самом деле, если писать полностью, то у меня есть один тип материала - НОВОСТИ,в котором будет полно нод, в этом типе есть поле типа СПИСОК,
в котором 3 значения РАЗМЕСТИТЬ В ЛЕВОМ САЙДБАРЕ, РАЗМЕСТИТЬ В ПРАВОМ САЙДБАРЕ и НЕ РАЗМЕЩАТЬ НИ В ОДНОМ.
есть 2 вьюхи (аналогичные друг другу) на каждый сайдбар, в одной выводится ОДНА нода которая имеет значение поля РАЗМЕСТИТЬ В ЛЕВОМ, и соответственное другая со значением В ПРАВОМ.
получается мне этим значением поля нужно назначать какая из 100500 новостей будет выводиться в ЛЕВОМ, а какая в ПРАВОМ.
получается, допустим я создаю 10 нод, и во всех по умолчанию значение НЕ РАЗМЕЩАТЬ НИ В ОДНОМ, => мои вьюхи пустые и ничего не показывают т.е. всё правильно.
далее я добавляю следующую новость и указываю что В ЛЕВОМ, вьюха - показывает её, молодец
ещё раз добавляю новость и снова говорю что В ЛЕВОМ, по идее по умолчанию с помощью сортировки вьюха предыдущую не покажет, т.к. она второй уже идёт, а мы показываем только 1 самую, вроде бы всё верно и работает, показывает только что созданную ноду...
НО! если сейчас в друг зайти в эту же только что созданную новость и поменять значение на НЕ РАЗМЕЩАТЬ, то он её не покажет на вьюхе, но он покажет предыдущую, т.к. она то тоже имеет ещё с того раза значению В ЛЕВОМ
а не надо её показывать.
ой как сложно всё это писать и не факт что внятно описываю, я решил не париться и сделать рулзой, но что то подзабыл уже как с ней работать
как я делаю
EVENT - Перед сохранением материала
CONDITION - Entity has field - РАСПОЛОЖЕНИЕ НА ГЛАВНОЙ (поле)
Data comparsion = В ЛЕВОМ (значение)
и вот дальше по идее нужно запустить другую рулзу, задача которой будет штудировать все ноды типа НОВОСТИ, и у которых значение поля В ЛЕВОМ - поставить значение НЕ РАЗМЕЩАТЬ (почему нельзя в этой же рулзе, потому что он таким образом затерёт значение даже у тех, которых трогать нельзя, т.е. со значением В ПРАВОМ, ведь мне нужно только пока с левым разобраться)
но не могу найти ACTION - Запустить другую рулзу (а бы ли он такой? )
CONDITION - Entity has field - РАСПОЛОЖЕНИЕ НА ГЛАВНОЙ
Data comparsion = В ЛЕВОМ
ACTION - и вот с теми нодами которые соответствую выше указаными CONDITION-ами котором нужно добавить LOOP - который я совсем не умею пользоваться, чтобы он сделал SET DATA VALUE - НЕ РАЗМЕЩАТЬ.
зачем я делаю такой функционал, ведь можно было проще, тупо отключить что нить от показа вообще (вьюху) и ещё чё - увы делаю можно сказать для тупых людей, чтобы всё само без их участия можно сказать, ибо могу дел натворить
Так, может, Вам действительно проще задать тип материала "Главная страница" - и там задать 2 поля типа Node Reference - "Новость в левом сайдбаре" и "Новость в правом сайдбаре" ?
И дальше можно вообще не заморачиваться с views, а при темизации главной страницы просто вытаскивать их nid и руками рендерить поля ?
Не понимаю логику людей, ладно ТС новичок.
Задача в одном места надо вывести новость. Значит в одном месте надо указать nid и выводить филды. Нафиг, что то навешивать на ноду! Делать какие то доп поля и.т.д... Завтра понадобится ещё в 3х местах вывести, ещё полей у ноды создадите? А потом стоны что все тормозит... Может хватит уже микроскопом гвозди забивать и главное другим это же советовать!
я правильно понимаю, что вы предлагаете, просто в вьюхе фильтровать по определённому NID у ноды?
Естественно, у вас ведь задача вывести одну конкретную ноду, потом её заменить на другую. Вьюхой это сделано или вы сниппет/модуль напишите, это уже дело 10е.
Дополнительное поле будет создано на одной странице и в единственном экземпляре - для удобства редактора сайта.
Ему ведь легче зайти в настройки главной страницы и выбрать в этом доп. поле новость из списка новостей (или из автодополняемого текстового поля), чем вручную прописывать куда-то nid этой новости.
да да нужно вывести одну конкретную ноду Id во вьюхе фильтруем или в блоке выводим ссылку на эту ноду...
можно еще флаг + рулес
На какое её место? куча из ста нод, убираем одну,мешаем-мешаем,добавляем одну - где наша нода на нужном месте? И где оно, место?
Дело в том что, как я ранее и писал, наполнение будут заниматься так сказать тёти Вали дяди Сергеи, которые как правило глупые =), и они будут что то вроде редакторами с небольшим наделением прав