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?
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 .
Tout est fait.
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:
Page
avec le chemin d'accès défini sur /articles/%
Ajoutez des filtres contextuels Contenu: Nid et définissez-le comme suit:
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.
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
.
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 -
foo/%/bar
ou foo/bar/%
pour un filtre contextuel unique OR de la forme foo/%/bar/%
ou foo/bar/%/%
pour plusieurs filtresLa 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
**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
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é?