суббота, 13 сентября 2014
Сегодня полдня билась над тем, как решить одну ма-а-аленькую задачку.
Аж до слез было обидно: делаю, как написано, а ни хрена...
Разобралась, да

Теперь осталось понять: молодец ли я? или просто слегка блондинко?
Утешает меня то, что под описанием модуля Rules, над которым я билась, несколько людей оставили описания из типа "ничего не понимаю!", "сделайте нормальные инструкции" и т.п.
Под катом - подробности решения, чтоб не забыть.
читать дальшеПроблема.
Есть две базы. Например: "Автор". И, например: "Статья".
В каждой базе есть связанные поля. У "Автора" поле "Авторские статьи" - где содержатся ссылки на написанные им статьи в базе "Статья". В базе "Статья" есть поле "Автор статьи" - где ссылка на пункт в базе "Автор".
Все прекрасно. Но есть одна проблема: чтобы поставить перекрестную ссылку, надо сделать два действия - сперва в "Авторе" выбрать его статьи, а потом в "Статье" - его автора.
В принципе, эти перекрестные ссылки не так нужны. Можно прекрасно жить и без них и прекрасно делать списки материалов Авторов другими путями. Но так однозначно проще.
Задача.
Автоматизировать процесс: при создании новой "Статьи" указываем в поле "Автор статьи" ник Автора - и у этого Автора автоматически пополняется поле "Авторские статьи" ссылкой на эту самую статью.
Решение
Модуль Rules.
Триггер - создание нового материала типа "Статья" (потом попробую еще обновление ранее созданного)
Условия 2 - Тип материала: node = "Статья"; содержимое его поля "Автор статьи" (node:поле_Автор_статьи) содержит ссылку на тип материала "Автор"
Действие - Add an item to a list; в поле node:поле_Автор_статьи:поле_Авторские_статьи - значение node (и проставляем галочку для проверки уникальности)
Все.
Условие функционирования
В исходящем материалы ("Статьи") может быть только 1 значение. Как только мы допускаем список значений, увы, все перестает работать.
Теоретически решается PHP-программированием.
Практически, пока, решается созданием отдельных полей "Автор-1", "Автор-2" и т.п. Увы, только так.
@темы:
сайт
Так теоретически я ее понимаю, но вот как переложить сам принцип на реалии друпала - пока не понимаю.
В принципе, у меня проблема была в том, чтобы сделать при изменении поля "автор" в одной таблице связанное с ней "статьи" в другой. И там, и там возможны поля с неограниченным количеством значений. Но конкретно автозаполнение удавалось сделать только при соотношении один-к-многим. Теперь я еще могу несколько-к-многим. Но по хорошему надо делать много-к-много (не ограничено), для этого надо запустить бы цикл - но не выходит у меня цикл конкретно в реалиях модуля rules. То есть для каждого варианта значений надо отдельно прописать замену - только так. А больше чем на 5 значений прописывать действия сверок и изменений - это мазохизм )
А если делать промежуточную таблицу - как обойти это много-к-много?
и если её создавать, то в каждой отдельной связке получается отношение один-ко-многим
например, назовем эту таблицу "Авторы статей"
в таблице "Авторы" у нас есть один уникальный автор, и ему нужно приписать статей
мы при этом не трогаем таблицу "Авторы", а записываем изменения в таблицу "Авторы статей", туда прописываем пары "id этого автора"+"id статьи"
т.е. получается, что одной строке таблицы "Авторы" будет соответствовать несколько строк таблицы "Авторы статей"
и аналогичная связь будет у этой же таблицы со статьями
Мне этот механизм нравится, я как раз думаю его попробовать в случае с другими парами: драма - сэйю.
В случае с авторами меня смущает его все-таки интуитивная непонятность. Потому что в идеале я хочу сделать так, чтобы статью или что-то другое добавить мог любой пользователь (авторизованный) и указать к ней автора. Объяснять о необходимости заполнения промежуточных таблиц - уже сложно.
Но здесь как раз, я надеюсь, будет достаточно сделать ограниченное количество полей несколько-ко-многим. Надеюсь, что у статей не может быть больше 5 авторов )
в идеале я хочу сделать так, чтобы статью или что-то другое добавить мог любой пользователь (авторизованный) и указать к ней автора
по идее с точки зрения пользователя это и должно выглядеть так, промежуточная таблица должна заполнятся самим сайтом
Надеюсь, что у статей не может быть больше 5 авторов )
думаю 2-3 это максимум)) вот сейю и правда больше будет
м... я-то думала, что я поняла ) а теперь вот поняла, что не поняла.
Я-то думала, что заполняем промежуточную таблицу. Там каждая пара автор-статья - это отдельный материал. В каждой паре возможно единственное значение, которые = ссылки на соответствующие материалы в типе Авторы и Статьи. И при заполнении этой страницы как раз Правилами мы автоматом заполняем поля с множественными значениями у соответствующих Авторов и Статей ссылками на эти пары в типе "Авторы статей". Вот тогда получается один-к-многим (одно значение в "Авторы статей" - на множественные значения полей-ссылок в Авторах и Статьях).
Но это работает именно при заполнении со стороны промежуточной таблицы.
А как сделать, чтобы сайт заполнял сам промежуточную таблицу?
Ведь тогда опять проблема, разве что в формате много-к-одному, а не много-к-много.
Разве что как-то вьюхой выводить на страницу создания материала "Автор" таблицу для заполнения из "Авторы статей"? Где-то я видела что-то подобное среди модулей, правда, там шла речь о правке, а не о создании. Если я не путаю.
За ссылку спасибо. Меня, конечно, пока пугает php, но если все другие пути не заработают - придется как раз влезать
А с модулем relation не приходилось сталкиваться? Читала, что вроде он как раз делает равные связи (а не направленные, как node reference). Но как-то мало про него, во всяком случае - в рунете. Только общие слова.
я просто конкретно с друпалом не работала, не знаю как там всё устроено
по идее должна быть реализация подобных отношений в модулях, потому что они довольно популярны
php не страшный
я тоже его сначала боялась, но потом ничего, втянулась))
когда оно не сваливается вместе с друпалом и всем прочим в кучу ) у меня мозги уже кипят.
и сейчас мне все страшно.
а если к этому добавить, что друпал меняется, зараза такая... у меня вот вообще сейчас подозрение, что зря я этот огород с обратными связями горожу, что он был актуален для 6-й версии друпала или для других версий вьюса... а теперь все делается куда проще. Пойду проверять ) если так - напьюсь с горя ))) столько времени голову ломала ))
эх, как жаль )
но мозги-в-теме-сайтостроительства - это все равно круто )
у меня недавно такая фигня на работе была, я над простой задачей сидела, голову ломала, в 2 раза больше времени потратила, а оказалось всё до смешного просто, но на форумах этого нигде не описано, потому что "все и так знают, о чем еще говорить"))
ха, да-да-да, это тоже есть )
все, что меня утешает - это то, что даже многоопытные люди тоже так периодически зависают (ну, мои знания ограничиваются месяцем копания в друпале). Пару дней назад с отцом говорила (а уж он-то опытный компьютерщик - караул); думала, сейчас надо мной посмеется... ан нет, стал сам рассказывать, как по форумам копался, решение не мог найти несколько дней для своей проблемы.
Я все проверила. Реально идти-напиваться пора ) ларчик открывался просто.
тут ситуация вообще смешная. проблема была описана в разных учебниках, уроках. Было известно, как ее решать - и в общем я шла по общим рецептам (не считая того, что не могла найти ссылку много-на-много).
Но друпал развивается, модули развиваются, причем каждый - независимо. И где-то по ходу проблему решили - и связи теперь кое-как работают в обе стороны. Но об этом, конечно, никто же писать не будет. Нафига? ))))
У меня два вопроса:
- можно на ты?
- а нет желания поработать над сайтом WK? помощь специалиста очень бы пригодилась.
ну это как обычно
- можно на ты?
да, конечно))
- а нет желания поработать над сайтом WK? помощь специалиста очень бы пригодилась.
желание есть, а вот со временем проблемы, я учусь и работаю, так что помогать смогу не часто
со временем - это я понимаю, его требуется прилично, тем более, что надо вникать не только в код сайта, но и в друпал; но мне бы любая помощь пригодилась - частая или нет ) особенно, учитывая, знание php ) я пока даже не знаю, с какой стороны к нему подступиться
я написала в умыл, но что-то меня глючило с отправкой. Если не придет - напиши, пожалуйста.
И еще вот тут - наше сообщество: wk-site.diary.ru/
Вроде бы я сделала доступ, но если оно все еще недоступно для тебя - напиши.