web-dev-qa-db-fra.com

Comment limiter les termes de taxonomie autorisés en fonction du type de contenu?

J'ai deux types de contenu différents, Computer et Chemistry, et des termes de taxonomie pour tous les articles (types de contenu) qui stockent la méthodologie de l'article. La hiérarchie taxonomique est la suivante.

  • Des articles
    • Ordinateur
      • Arithmétique (ID de terme: 1)
      • DMA (ID de terme: 2) // abréviation de "Direct Memory Access"
    • Chimie
      • NGE (Terme ID: 3) // abréviation de "Noble Gas Elements"
      • DMA (ID de terme: 4) // abréviation de "Dynamic Mechanical Analysis"

Lorsque les utilisateurs créent ou modifient un nœud de type Chimie, juste NGE et DMA (dont l'ID est 4) devrait être autorisé à sélectionner.

Je n'ai besoin que d'un seul vocabulaire de taxonomie, car il y a trop de types de contenu, et si je veux ajouter un vocabulaire pour chacun d'eux, alors il mène trop de vocabulaires; plus important encore, il supprime la possibilité de naviguer librement dans différents types en utilisant la hiérarchie de taxonomie.

Comment limiter les termes de taxonomie autorisés en fonction du type de contenu?

6

Selon mon choix, vous devez utiliser hook_form_alter pour lier la liste de taxonomie en fonction du type d'article.

function MY_MODULE_NAME_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'my_form_id') {
    $default_value = 0;
    $options = getArticles('Computer','Articles');
    $form['your_taxonomy_field_name'] = array(
      '#title' => t('Articlas'),
      '#type' => 'select',
      '#options' => $options,
      '#access' => 1,
      '#default_value' => $default_value,
      '#weight' => 1,
    );
  }
}
function getArticles($articleType,$vocabularyName) {
  //get the vocabulary
  $vocabulary = taxonomy_get_vocabularies();
  $vid = -1;
  foreach ($vocabulary as $item) {
    if ($item->name == $vocabularyName) {
      $vid = $item->vid;
    }
  }
  if ($vid != -1) {
    //get the parrent Term
    $query = new EntityFieldQuery;
    $result = $query
      ->entityCondition('entity_type', 'taxonomy_term')
      ->propertyCondition('name', $articleType)
      ->propertyCondition('vid', $vid)
      ->execute();
    $parrent_tid = array_shift($result['taxonomy_term'])->tid;
    //return children
    return taxonomy_get_children($parrent_tid);
  }
  return NULL;
}
3
Kamal Oberoi

Le module Term Reference Tree pourrait vous aider. Ce module fournit un widget d'arborescence extensible pour le champ Référence de terme de taxonomie dans Drupal 7.

Arborescence de référence des termes:

Ce module fournit un widget d'arborescence extensible pour le champ de référence de terme de taxonomie dans Drupal 7. Ce widget est destiné à servir de remplacement pour le widget de base de référence de terme de taxonomie de Drupal, qui est une liste plate de radio boutons ou cases à cocher et ne conviennent pas nécessairement aux arbres de taxonomie moyens à grands.

Comment utiliser ce module

1) Activez le module Term Reference Tree.
2) Accédez à l'onglet Gérer les champs de toute entité pouvant être mise en champ (comme un type de contenu, un terme de taxonomie ou un utilisateur).
3) Ajoutez un nouveau champ avec un type de référence de terme.
4) Dans la boîte de sélection du widget, sélectionnez Arborescence de référence des termes.

enter image description here

5) La dernière étape est importante onc, comme le montre l'image ci-dessous, vous devez donner le terme de taxonomie identifiant le vocabulaire que vous souhaitez afficher pour un type de contenu spécifique.

2
mks

Selon cette réponse sur le site principal Stackoverflow , un sous-module de Content Taxonomy appelé "Content Taxonomy Options" serait parfait pour cela:

Vous pouvez le faire avec Content Taxonomy 's Content Taxonomy Options module. Ajoutez un nouveau champ Taxonomie du contenu et utilisez le widget Sélectionner. Dans les paramètres de champ, sous le groupe de champs Paramètres avancés pour les vocabulaires hiérarchiques, sélectionnez le terme parent que vous souhaitez utiliser pour ce champ.

2
Paul Querol

Le mobile et l'ordinateur portable doivent être des vocabulaires distincts.

Ensuite, pour le type de contenu mobile, lorsque vous ajoutez un champ de terme fiscal, sélectionnez mobile comme vocabulaire.

1
No Sssweat

Je suggérerais de supprimer complètement la taxonomie et de définir vos propres types de contenu. Je vais en profondeur dans n autre post . Lorsque vous faites défiler mon message, vous constaterez que vous pouvez faire exactement ce que vous cherchez à faire.

Je ne suis pas un grand fan de la philosophie "il y a un module pour cela" car chaque fois que vous ajoutez un autre module, vous augmentez l'empreinte de votre site Drupal; vous chargez ce module pour toujours page dans session, que vous en ayez besoin ou non.

En utilisant Views, Entity, Entity-Reference, Entity-Connect (des trucs que vous devriez utiliser), vous pouvez désactiver complètement la taxonomie et obtenir une meilleure indexé alternative à la taxonomie.

Dites non à la taxonomie

1
Allan