web-dev-qa-db-fra.com

Rendre un ID de ligne de vues à l'aide de NID (ID de nœud)

Je peux facilement ajouter NID (Node ID) en tant que champ dans ma vue, puis le rendre en tant que classe pour la ligne de vues en utilisant des modèles de remplacement pour la classe de ligne d'une vue typique non formatée. (Voir capture d'écran).

enter image description here

Cependant, je voudrais rendre le NID sous la forme d'un ID pour chaque ligne à utiliser pour certains thèmes spéciaux que je fais. Si j'utilise devel themer, je vois que mon modèle est views-view-unformatted.tpl.php afin que je puisse bien sûr copier ce modèle dans le dossier de modèles de mon thème avec un nom personnalisé spécifique à ma vue, puis le thème.

La ligne de code appropriée dans le modèle qui rend la classe de ligne est:

  <div<?php if ($classes_array[$id]) { print ' class="' . $classes_array[$id] .'"';  } ?>>

Si je le change en:

<div<?php if ($classes_array[$id]) { print ' class="' . $classes_array[$id] .'"';  } ?> 
    id="<?php print $fields['nid']->content ?>">

... Cependant, cela ne fonctionne pas car je ne pense pas que les champs soient disponibles à ce niveau dans la ligne des vues.

Donc, en ce moment, ma sortie rendue est:

<div class="views-row views-row-1 views-row-odd views-row-first mynid-63">
<div class="views-row views-row-2 views-row-even mynid-64">

... quand j'aimerais que ce soit

<div class="views-row views-row-1 views-row-odd views-row-first" id="mynid-63">
<div class="views-row views-row-3 views-row-even" id="mynid-64">

Ma question, existe-t-il un moyen de simplement rendre le NID associé là où je le veux comme identifiant autre que la méthode que j'essaie d'utiliser?

5
Danny Englander

Dans la plupart des modèles de vues, l'intégralité de l'objet $view Est disponible. Donc, en supposant que vous avez un champ nid dans la ligne, vous devriez pouvoir y accéder avec quelque chose comme ceci:

$view->result[$id]->nid

alors, donne

id="my-nid-is-<?php print $view->result[$id]->nid; ?>">

essayez dans votre modèle.

Si cela ne fonctionne pas exactement, une print_r($view->result); en haut du modèle vous donnera un aperçu de ce avec quoi vous devez travailler.

9
Jimajamma

Le NID est ajouté via les paramètres de format en dernier dans la chaîne de classe; '$ classes_array [$ id]

Obtenez la dernière classe dans la chaîne de classe (qui est le Nid ajouté via les vues) Ensuite, ajoutez simplement $ last comme ID approprié à la ligne après les classes

alors changez ceci en:

<div<?php if ($classes_array[$id]) { print ' class="' . $classes_array[$id] .'"';  } ?>>

à:

<div<?php if ($classes_array[$id]) { 
    $class_string = explode(' ', $classes_array[$id]);
    $last = end($class_string); 
    print ' class="' . $classes_array[$id] .'"' . ' id="' . $last . '"';  
 } ?>>
1
jorisx