ВопросПрава для нод и зависимые поля.

Здравствуйте! При создание проекта, возник один интересный и срочный вопрос. Просто если вопрос не решить на данном этапе, в будущем будет тяжело переделать всю структуру проекта.

Задача:
На сайте зарегистрированные пользователи, могут добавлять заведения (рестораны, кафе, ТОО и т.д.). У них есть право выбора нескольких тарифов – Бесплатный, Стандартный и Расширенный.
3 разных тарифа предусматривают разные права публикации заведения. Допустим в бесплатном можно добавить только до 3 фото. В стандартном до 20. В бесплатном нет возможности добавлять товары или блюда, нет возможности создавать события. В других тарифах это есть.
Как известно мне, права имеют пользователи а не ноды. На данном этапе мы планировали, создать тип материала Заведения. Пользователь мог добавлять несколько заведений и выбирать тарифы посредством Списка (Флажки/переключатели). Затем планировалось создать тип материала Блюда или Товары, События.

ВНИМАНИЕ вопросы!!!
1. Как менять права ноды при выборе разных тарифов, не меняя права пользователя. Или придется каждое заведение делать как пользователя???
2. Как сделать так чтобы тип материала Товары, пренаделжал типу материала Заведения, если оно создается для этого заведения???
3. Как для разных тарифов сделать разное количество фото? Или просто делать зависимые поля + 3 поля Изображения. При выборе нужного тарифа, выводиться поле, с нужным количеством изображений.
4. Какой модуль выбрать для зависимых полей. Есть ли альтернативы conditional_fields, слышал что он не даработан для drupal 7

Заранее спасибо за ответы и за помощь. Просто хочется не упереться в потолок, и изначально сделать все правильно.

Комментарии

Аватар пользователя sergeybelya
sergeybelya написал:

http://drupal.org/project/field_permissions
https://drupal.org/project/node_limit
https://drupal.org/project/entityreference

06.08.2013 11:59
Аватар пользователя sergeybelya
sergeybelya написал:

http://stackoverflow.com/questions/5701488/change-fields-number-of-values-per-role

06.08.2013 12:05
Аватар пользователя lionman
lionman написал:

http://drupal.org/project/field_permissions

Это понятно. Тогда надо делать заведение - как пользователя. Т.е. Работать по принципу, 2 вида регистрации - Пользователь и Заведение.

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

06.08.2013 13:29
Аватар пользователя sergeybelya
sergeybelya написал:

Зачем? Все можно решить через различные роли для пользователей и разграничить права в соответствии с тарифами.

06.08.2013 13:44
Аватар пользователя lionman
lionman написал:

Это то понятно. Тогда одному пользователю разршить добавлять только одно заведение? И как потом если он вдруг не оплатил, все сбросить на бесплатное, не теряя информацию, если он захочет её восстановить.

Права даются для пользователя, но изначально хотелось чтобы он мог добавлять несколько заведений, и не факт что все на платной основе.

06.08.2013 14:23
Аватар пользователя sergeybelya
sergeybelya написал:

Все это решается, посмотрите тот же Node Limit, есть еще модули для работы с правами.

06.08.2013 14:46
Аватар пользователя lionman
lionman написал:

Спасибо. Будем тестировать. Если что еще напишу сюда же)

06.08.2013 15:54
Аватар пользователя lionman
lionman написал:

Node Limit решил проблему по поводу количества материала который добавляет определенная роль.

Но как сделать так чтобы пользователь, мог добавлять заведение. Там выбирать тариф, и в соответствии с тарифом, ему были доступны определенные функции.

Но пользователья может добавлять несколько заведений с разными тарифами

12.08.2013 12:16
Аватар пользователя sergeybelya
sergeybelya написал:

Наиболее простое решение - создать для каждого тарифа свой тип материала.

12.08.2013 12:25
Аватар пользователя lionman
lionman написал:

Простое но не совсем удобное. 3 разных типа. Много разных категорий. Если нужно поменять тариф, нужно менять тип материала. Как то все запутано. Пока не могу вдуплиться, как лучше сделать.

12.08.2013 13:39
Аватар пользователя sergeybelya
sergeybelya написал:

Тогда создавайте мультишаговую форму добавления материала, на первом шаге анализируйте выбранный тариф, на следующих соответственно выводите поля в зависимости от тарифа. Потребуется хорошее знание Forms API друпала.

12.08.2013 14:27
Аватар пользователя lionman
lionman написал:

Уже сделали мультишаговую форму, только через модуль Multistep Nodeform - он не подойдет?
Я думал сделать первый шаг выбор тарифа. А затем через rules сделать правила. Но тоже не совсем получается.

13.08.2013 07:53
Аватар пользователя sergeybelya
sergeybelya написал:

Я бы не связывался с rules, а решил бы написанием своего кастомного модуля.

13.08.2013 12:04
Аватар пользователя lionman
lionman написал:

А как сделать через Entity Reference вот такое:

Пользователь заходит на свое заведение. У него появляется блок с ссылкой, создать Товар. Когда он её нажимает, поле Entity Reference не видно но автоматически относиться к заведению через которое нажали ссылку создать Товар

13.08.2013 09:38
Аватар пользователя sergeybelya
sergeybelya написал:

https://drupal.org/project/inline_entity_form

13.08.2013 12:03
Аватар пользователя lionman
lionman написал:

Вроде не совсем то. Выбираю виджет и добавляется создание материалов в создании материалов.

Т.е. Все товары должны заполнять при добавлении заведения.

Нужно чтобы пользователь добавлял заведение, затем если ему нужно из странице своего заведения. Нажимал на кнопка создать товар. Появлялась страница добавления товара, который относиться именно к этому заведению, без возможности выбрать чужие заведения. Или еще лучше чтобы можно было выбрать заведение из списка добавленных заведений пользователем. Разве это можно реализовать модулем inline_entity_form

13.08.2013 12:48
Аватар пользователя sergeybelya
sergeybelya написал:

Тогда вам нужно сделать наоборот. В типе "Товар" добавить поле Entity Reference (ссылка на заведение). И будет как вы хотите.

13.08.2013 13:07
Аватар пользователя lionman
lionman написал:

Ну я так и делаю. Только вот в значениях видны вообще все заведения. А не только заведения пользователя. Нельзя разрешать выбирать чужие заведения. Ведь он создает товар для своего заведения

13.08.2013 13:41
Аватар пользователя sergeybelya
sergeybelya написал:

Используйте views для этого, т.е. в настройках поля укажите в "Выбор сущности" режим Views, предварительно создав специальную вьюшку с дисплеем Entity Reference. А вообще у вас что-то с правами, пользователь и так должен в этом списке видеть только свои заведения. Проверьте, не дали ли вы право редактировать любые товары заведения пользователям? Должно стоять ограничение "свои".

13.08.2013 13:57
Аватар пользователя lionman
lionman написал:

Да установил. Что возможно где то косяк с правами.?

Проверил. Права на редактирование своих заведение и товаров стоит. Просмотр всех заведений

Для поля Entity Reference стоит доступ Private (only author and administrators can edit and view)

13.08.2013 14:02
Аватар пользователя sergeybelya
sergeybelya написал:

Тогда формируйте список заведений вьюшкой с фильтром по автору.

13.08.2013 14:06
Аватар пользователя lionman
lionman написал:

Все создал через вьюс. Все работает, вроде как отлично. Добавил Контекстный фильтр Содержимое: UID Автора
Передать значение по умолчанию - ID авторизировавшего пользователя.

И еще вопрос. В значениях поля символы " и ' меняются на коды. В чем возможно проблема?

13.08.2013 14:51
Аватар пользователя sergeybelya
sergeybelya написал:

Что за поле? Где именно происходит замена?

13.08.2013 15:34
Аватар пользователя lionman
lionman написал:

Ну значения поля Entity Reference, берутся из заголовков нод заведений. И если там символы " или '
то почему то выводятся их коды

14.08.2013 06:38
Аватар пользователя sergeybelya
sergeybelya написал:

Поищите на drupal.org, там таких issue полно.

14.08.2013 11:42

Комментировать