[Решено] Как передать uid автора ноды или nid ноды выбранному виду в поле node_reference?

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

Аватар пользователя MITSUFAN MITSUFAN 26 мая 2009 в 3:35

В каком формате, виде, по каким правилам, короче КАК в поле Аргументы Вида: в CCK Node reference передать аргумент, который бы передавал uid автора текущей (редактируемой/создаваемой) ноды? Много сказано, согласен, но не всё.

Пользователь добавляет "Машину" и "Запись" для неё. При создании "Записи" нужна привязка к "Машине" автора.

• Создаю поле Node_reference, привязываю его к виду select_user_car (выборка "Машин").
• Вид включает фильтры: Тип:"Машины" + Опубликовано,
• Аргумент: Пользователь:Uid (по умолчанию:"текущий пользователь" - это для момента создания ноды)

Всё должно работать, НО с поля Node_reference аргумент (uid автора ноды) никаким местом не передается виду. Точнее, если я там явно задам 1 или 2 или 3 и т.п., то всё работает, но это не годится, нужно что-то универсальное в это поле. Неужели авторы не предусмотрели ничего такого, например, %uid или [author-uid]?

Если всё упростить до:
• Создаю поле Node_reference, привязываю его к виду select_user_car (выборка "Машин").
• Вид включает фильтры: Тип:"Машины" + Опубликовано:"Да" + Пользователь:"Текущий"
• Аргументов нет

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

Что делать? Не хотелось бы останавливаться на упрощенном варианте, а как реализовать полный не имею понятия.

Комментарии

Аватар пользователя MITSUFAN MITSUFAN 29 мая 2009 в 12:49

Из поля nodereference пытаюсь передать выбранному виду аргумент не %uid, а %nid

Затем в виде:
- В фильтрах включаем Тип материала и Опубликовано
- Включаем Аргумент:
Пользователь:Uid, если нет аргумента, то Подставить аргумент по умолчанию->User ID from logged in user
Настройки проверки аргумента:
PHP код:

<?php
if ($argument){
   
$anode node_load($argument);
   
$handler->argument $anode->uid;
   return 
true;
}
return 
false;
?>

И опаньки - всё работает только внутри вида Preview. А на деле ничего по прежнему не работает Sad

В общем из поля Node_Reference ни в какую не хотят передаваться никакие переменные и им подобное через поле Аргументы Вида:. Что неправильно делаю?

P.S.
Логика процесса:
На момент создания материала юзверь и есть текущий пользователь, а потом после сохранения уже виду передается id ноды, откуда вычислить автора не составило труда. Поэтому Автор ноды в референсном поле видит только свои значения, а редактор (админ и ему подобные, имеющие право редактирования) видят только записи автора ноды, не нарушая связей.

Аватар пользователя Fanny@drupal.org Fanny@drupal.org 29 мая 2009 в 12:51

Нужно условие... Чтобы админ мог все

Хотя я для такого случая делал отдельное представление, админское... Но в данном случае - только условия

Аватар пользователя MITSUFAN MITSUFAN 29 мая 2009 в 12:53

Неа, фильтром не прокатит. Нужно именно снять автора ноды. Текущий юзверь нужен только в момент создания ноды, чтобы он видел только свой список. А потом нужно получать аргумент с поля, которе никак не хочет им делится. Ставлю цифры, буквы -всё ок, но выражения типа %nid %uid [nid] и т.п. не проходят.

Аватар пользователя MITSUFAN MITSUFAN 29 мая 2009 в 13:03

<a href="mailto:Fanny@drupal.org">Fanny@drupal.org</a> wrote:
Нужно условие... Чтобы админ мог все

Хотя я для такого случая делал отдельное представление, админское... Но в данном случае - только условия


Можно и наградить админа "видеть всё", но не обязательно. Главное сейчас чтобы список админа не заменял список юзверя-автора при редактировании (корректировке) ноды, а для этого нужно передать аргумент (nid или uid) из ноды виду, который формирует поле node)reference.

Аватар пользователя MITSUFAN MITSUFAN 31 мая 2009 в 0:52

Порешено!
Берем вот отселя патчик для nodereference модуля http://drupal.org/node/334121 . Благодаря ему появится поле для ввода PHP кода со всеми вытекающими.
В нем, лично я, написал следующее:

<?php
if (arg(0) == 'node' && is_numeric(arg(1))) {
   
$anode node_load(arg(1));
   return 
$anode->uid;
} else {
   return 
NULL;
}
?>

А в виде, на который ссылается nodreference поле для формирования списка допустимых необходимых значений, в качестве аргумента выбрал Пользователь: Uid (с условиями, если нет аргумента, то Подставить аргумент по умолчанию -> User ID from logged in user, настройки проверки: Базовая, Если аргумент некорректен, то: Скрыть представление), в качестве фильтров Материал: Тип = Нужный тип и Материал: Опубликовано Да, а в качестве поля для вывода Материал: Название.

Всё не сложно, но без патча никак не получится передать что-то подобное, описанное в названии темы.
Патчил ручками - тоже всё просто.

Физика процесса:
В момент создания ноды с референсным полем юзеру доступны только его значения (работает проверка в аргументе вида Подставить аргумент по умолчанию -> User ID from logged in user), т.к. никакие аргументы из поля не передаются из-за проверки

<?php
if (arg(0) == 'node' && is_numeric(arg(1))) {
?>

Затем при последующем редактировании юзер опять видит только свои значения в референсном поле т.к. уже поле передает его uid виду (arg(0) равен 'node' и arg(1) является нужным нам числом), а вид соответственно его как следует переваривает Настройки проверки: Базовая. При этом редактор (админ или модератор) видят в списке референсного поля значения юзера-автора и не стоит боятся, что эти значения переопределятся, как было когда я использовал в виде фильтр Текущий пользователь.

Еще на орге есть патч, добавляющий возможность подстановки токен шаблонов http://drupal.org/node/196518, но у меня отчего-то ничего не заработало, ну в принципе и не надо, когда есть PHP поле Smile