Ограничить выбор по Entity Reference
26 апреля 2013 в 11:48
Есть задача: Ограничить пользователя в выборе по Entity Reference
Есть материал допустим Color
Есть еще один материал допустим Desk который имеет ссылку на Color
Пользователю разрешено добавлять материалы Desk где он в обязательном порядке должен выбрать из списка Color
Стоит задача ограничить пользователя в выборе Color только теми позициями которые не участвовали в ранее добавленных материалах.
Скажем пользователь добавил материал Desk1 с Color Red. Ему нужно запретить добавить материал Desk2 с Color Red. Хорошо бы было если можно было бы отфильтровать непосредственно список выбора, хуже если выдавать сообщение при сохранении, но подойдет любой из вариантов.
Подскажите может уже были схожие задачи или в какую сторону копать.
- Блог
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Комментарии
В сторону прав доступа в списку выбора - если например список это термины - но tac, если материалы - то content_access
Спасибо, но по моему мне это не подойдет т.к. этот модуль позволяет задавать права для доступа на этапе конфигурирования, а мне нужно динамически. Пользователь добавил материал с цветом, все еще один с таким цветом он не может добавить только с другим. Удалил материал - добавляй. И так для каждого пользователя у кого есть доступ до материала.
Тогда надо динамически формировать список для селекта, но особо быстро работать не будет, на большом количестве юзверей.
Ясно. Спасибо. Буду думать.
http://api.drupal.org/api/drupal/modules!field!field.api.php/function/ho...
hook_theme_registry_alter(&$theme_registry) {
...
if(isset($theme_registry['form_element'])){
$theme_registry['form_element']['function'] = 'theme_my_form_element';
}
...
Алексей, так ведь не будет валидировать потом, если через темизацию селекта чисто убирать лишние..
Возможно, надо проверять, а что в селекте валидировать, я там понимаю он только уменьшать список будет?
Спасибо за предложения, буду разбираться.
Да мне достаточно только уменьшить список.
Если только при темизации лишние опции вырезать, то есть возможность послать в post запросе значение (ясное дело не просто из браузера форму сабмитить), которое мы вырезали, но друпал не пикнет даже и сохранит, а вот если на уровне формирования формы (уж простите за тавтологию:)) вырезать лишние опции, то выдаст пользователю ошибку - недопустимое значение и не сохранит.
Да Вы правы, полностью безопасно - hook_field_widget_form_alter или form_alter(), но в некоторых случаях вполне модельной более быстрой Theme.
Я пробовал как-то через form_alter до элементов, создаваемых полями добраться - не получилось..
Все на месте
<?php
function hook_form_alter(&$form, &$form_state, $form_id) {
ob_start();
print_r($form);
$plain = ob_get_contents();
ob_end_clean();
if ($handle = fopen($_SERVER['DOCUMENT_ROOT'] . base_path() . "tmp/temp_103_{$form_id}_". microtime() .".txt", 'w+')) {
fwrite($handle, $plain. "\n");
fclose($handle);
}
}
?>
Хм, проверил, да, действительно в hook_form_alter все на месте, можно менять, с чем-то другим спутал, прошу прощения за дезинформацию.
Удалось ли как-нибудь решить эту задачу? Может модуль какой отыскали/написали? Сейчас пытаюсь сделать такое же
По-моему там можно вьюху выбирать и по вьюхе делать выбор из чего-то.