Вы здесь

1

нужно ограничить выбор терминов при добавлении артикула и при добавлении ноды только теми терминами, которые указаны админом для данного типа товара.
Как?

Версия Drupal: 
7.x
Связанные проекты: 
Drupal Commerce
Вопрос задан 10.04.2015 - 14:35

И еще вопрос: как при добавлении Товара на Склад Коммерц выводить Термины словаря Фирмы только на текущем языке пользователя? У меня получается , что словарь Фирмы (у которого опция Translate) выводится весь при добавлении артикула, то есть допустим фирма SuissClock выводится 5 раз на всех языках одинаково.

Комментарий оставлен 11.04.2015 - 00:04

я решил, что иерархия начинается от фирмы, а от пользователя, поэтому для термина словаря "Фирмы" я добавлю поле ссылки на пользователей, кому разрешено добавлять товары этих фирм.
подскажите, где найти как писать функцию, чтобы пользователям выводились только разрешенные фирмы при добавлении товаров на склад и товаров на витрину (это одно поле в двух местах)

Комментарий оставлен 11.04.2015 - 16:20

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

<?php
/* BASE_FORM_ID : node_form */
/* Displays only terms that have Entity Reference field with current user reference */

function user_referenced_taxonomy_terms_form_node_form_alter(&$form, &$form_state, $form_id) {

  global $user;
  //if current user has roles administrator or editor return
  foreach ($user->roles as $role) {
      if (($role == 'administrator') || ($role == 'editor')) return;
  }
  if (isset($form['field_firm'])) {
    $query = new EntityFieldQuery();
    $term_entities = $query
      ->entityCondition('bundle', 'firms')
      ->entityCondition('entity_type', 'taxonomy_term', '=')
      ->fieldCondition('field_seller','target_id',$user->uid) // if user has access
      ->execute();
    if ($term_entities) {
        //forming array of firms using $term_entities array
         $items = array_keys($term_entities['taxonomy_term']);
         foreach ($form['field_firm']['und']['#options'] as $key=>$value) {
             if ($key == '_none') continue;
             $delete=true;
             for ($i=0;$i<count($items);$i++) {
                 if ($key == $items[$i])  $delete = FALSE;
             }
             if ($delete) $form['field_firm']['und'][$key]= array('#access' => FALSE);
         }
    }else {
        //hide field firm if user has no access to any term
        $form['field_firm']['#access'] = FALSE;
    } 
  }
}



?>

а теперь то же самое для типов материалов??

Комментарий оставлен 01.12.2015 - 16:50

Ответы