web-dev-qa-db-fra.com

Drupal 7 Filtre contextuel sur l'alias d'URL

J'ai une vue qui montre une liste d'articles, située à:

mypage.com/articles

Chaque article est lié à sa vue de sous-page principale, comme ceci:

mypage.com/articles/name-of-my-artile-yay

Le chemin URL est créé avec des alias autopathe et URL.

Dans les vues, comment créer un filtre contextuel pour afficher uniquement la vue de sous-page sélectionnée?

J'ai ceci comme chemin d'accès dans les vues:

des articles/%

mais je ne sais pas où aller d'ici. J'ai essayé le titre et le rendre en minuscules et en remplaçant les espaces par un trait d'union, mais cela ne fonctionnera pas toujours et les alias d'URL modifient l'URL de telle sorte qu'il supprime les mots comme:

a, an, comme, à, avant, mais, par

Et si un titre de page est:

Ceci est le titre de ma page - avec ceci

L'alias d'URL devient:

le titre de ma page

Par conséquent, il ne pourra pas correspondre dans mon filtre contextuel en utilisant le titre de la page.

Qu'est-ce que je rate?

7
cybercampbell

Je pense que la façon la plus simple est d'utiliser des panneaux et de remplacer la page Node. Ajoutez une variante et mettez-y votre vue, et envoyez-lui l'argument nid du nœud, en utilisant l'argument contextuel node: nid .

  1. (installer le gestionnaire de pages)
  2. Activer vue du nœud page (nœud/nœud%)
  3. Ajouter une variante, définir des critères de validation en sélectionnant le type de nœud concerné
  4. Utilisez un affichage simple sur une colonne
  5. Ajoutez votre vue dans votre colonne
  6. Il demande un argument, envoyer le nœud: nid, (ou entity_id, ou autre)Send your node's nid to your view
  7. Selon vous, tilisez node: nid filtre contextuelYour view arg

Tout est fait.

8
Gregory Kapustin

Définissez l'alias de chemin pour le type de contenu sur quelque chose comme articles/[node:title]

Option 1: utiliser des vues pour exécuter des pages de détails

En vues:

  1. Créez une vue Page avec le chemin d'accès défini sur /articles/%
  2. Ajoutez des filtres contextuels Contenu: Nid et définissez-le comme suit:

    • Lorsque la valeur du filtre n'est PAS dans l'URL => Fournissez la valeur par défaut
    • Type => Valeur brute de l'URL
    • Chemin => Composant 1 (Cochez "utiliser l'alias du chemin")

Cela effectue une recherche de chemin sur le dernier segment d'URL (quelque chose comme "mon-article-titre-chemin-alias") et renvoie l'ID de nœud correct.

Option 2: vues de contournement pour exécuter les pages de détails

Au lieu de définir le chemin d'accès comme /articles/% définissez-le simplement comme /articles et laissez le tout le chemin alias /articles/% les nœuds se résolvent normalement.

3
Kara

Ajoutez un filtre contextuel pour l'ID de nœud et fournissez la valeur par défaut en utilisant PHP:

if (isset($this->view['args'][0])) {
  $path = db_query("SELECT source FROM {url_alias} WHERE alias = :alias LIMIT 1", array(':alias' => 'article/' . $this->view['args'][0]))->fetchColumn();
  if ($path) {
    $parts = explode("/", $path);
    if (isset($parts[1]) && is_numeric($parts[1])) {
      return $parts[1];
    }
  }
}

return FALSE;

Cela renverra, par exemple, node/123 si le titre du nœud 123 était Ma page et titre et vous avez accédé à la vue à example.com/the_view/my-page-title.

1
Charlie Schliesser

J'ai eu un problème très similaire et je n'ai pas seulement trouvé la solution, mais j'ai également appris de nouvelles choses sur le fonctionnement de la vue. Permettez-moi de partager ce que j'ai appris et la solution à votre problème aussi.

Lorsque vous créez une vue avec un ou plusieurs filtres contextuels, la vue doit recevoir les valeurs de ces filtres quelque part. Cela peut être fait par -

  1. Sélection des valeurs du filtre de contexte à partir de l'URL
    • En règle générale, vous auriez un page vue à ces fins, celui qui a l'URL du formulaire foo/%/bar ou foo/bar/% pour un filtre contextuel unique OR de la forme foo/%/bar/% ou foo/bar/%/% pour plusieurs filtres
    • Si vous avez plusieurs filtres, la valeur d'URL qui apparaît en premier est mappée sur le premier filtre, à côté du deuxième filtre, etc.
  2. Les vues vous permettent de dire que faire si les valeurs de filtre ne sont pas non disponibles dans l'URL . Ceci est généralement utilisé pour vues de bloc.
    • Vous pouvez choisir parmi différentes actions, puis configurer également le choix. You can choose from different actions and then configure the choice too. asdfj kajsdf
  3. Une autre chose que les vues vous permettent est de dire que faire avec les valeurs de filtre si elles se trouvent dans l'URL comme décrit au # 1 ci-dessus. Les cas d'utilisation typiques sont les suivants: création de titres dynamiques basés sur des valeurs de filtre, validation de valeurs de filtre, etc.
    • Lors de la validation des valeurs de filtre, vous pouvez également modifier les valeurs! (C'est là que se situe notre solution). Cela ressemble beaucoup à la façon dont nous pouvons modifier les valeurs de $ form dans les rappels de validation de formulaire drupal. enter image description here

La solution à votre problème spécifique consiste à utiliser un code très similaire dans les sections pointées par les flèches dans l'image ci-dessus.

Voici le lien qui m'a été d'une grande aide - http://www.drupalfoo.com/drupal-7-views-contextual-filter-argument-node-reference-using-url-alias

0
Sumeet Pareek
**Contextual filters**

1) Global: Null 2) (article) contenu/nœud: nid Lorsque la valeur du filtre n'est PAS disponible Fournir la valeur par défaut: valeur brute de l'url

0
Somik

Essayez cette approche ...

vous saisissez d'abord le chemin normal drupal "node/nid" puis vous prenez le nid pour charger la pleine charge puis utilisez le titre du nœud comme filtre contextuel.

1) Obtenez le chemin normal du nœud actuel affiché ...

<?php
$ogpath = drupal_lookup_path("source",$_GET['q']);

2) Cela peut être cher mais essayez-le ... obtenez le nid actuel

$ogarray = explode('/', $ogpath);
$node = node_load($ogarry[1]);
return $node->title;

Dites-moi si ça marche.

Votre pathauto supprime les mots d'une manière que je n'ai pas encore rencontrée, êtes-vous sûr qu'il est correctement configuré?

0
Chiko