view node list

papa71 képe

Valószínűleg, nagyon triviális a kérdés, de miután már jó néhány órám ráment a keresésre és még mindig nem sikerült megtalálni a megoldást inkább megkérdezem.
(drupal 5.2) Egy view lap láblécébe szeretnék olyan php-t tenni aminek szüksége lenne a view által megjelenítet nodeok nid-jére. Honnan tudom ezt kiolvasni?
A views forrásában látom, hogy ezt egy $nodes nevű tömbben tárolja, de hogyan tudom ezt meghivatkozni a láblécből?

Paal képe

Nem erre gondoltál?
$node->nid

Üdv, Pali

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

papa71 képe

Mint itt alább látod igazából nekem a $nodes[...]->nid -ekre lett volna szükségem az összesre. Igzából azért, hogy kikeressem a hozzájuk tartozó csatolmányokat és azokat betömörítsem egyetlen zip-be. Amit aztán link ként kirakok az oldal alján. (vagy még inkább a linkre kattintás hatására röptében tömörítem és elküldöm a felhasználónak)

A megoldás mint lejjebb írom is megszületett, csak nem univerzális és nem is elegáns :(

0
0
pp képe

(lehet van más sokkal jobb megoldás is.)

Szerintem a footer-ban nem lehet elérni ezeket a változókat, de erről magad is meggyőződhetsz:

 drupal_set_message('<pre>'.print_r(get_defined_vars(),true).'</pre>');

Azonban, bele tudod hekkelni a sminkbe a dolgot. A template.php-ba kell beletenned a megfelelő smink függvényt. A theme_ részt természetesen át kell írnod, a sminknek megfelelően(vagy a smink motor nevére ;))

valahogy így néz ki az eredeti:

function theme_views_view_list($view, $nodes, $type) {
  $fields = _views_get_fields();
 
  foreach ($nodes as $node) {
    $item = '';
    foreach ($view->field as $field) {
      if ($field['label']) {
        $item .= "<div class='view-label view-label-$field[queryname]'>" . $field['label'] . "</div>";
      }
      $item .= "<div class='view-field view-data-$field[queryname]'>" . views_theme_field('views_handle_field', $field['queryname'], $fields, $field, $node, $view) . "</div>";
    }
    $items[] = "<div class='view-item view-item-$view->name'>$item</div>\n"; // l($node->title, "node/$node->nid");
  }
  if ($items) {
    return theme('item_list', $items);
  }
}

és valamilyen ilyesmire kell megformáznod:

function theme_views_view_list($view, $nodes, $type) {
  $fields = _views_get_fields();
 
  foreach ($nodes as $node) {
    $item = '';
    foreach ($view->field as $field) {
      if ($field['label']) {
        $item .= "<div class='view-label view-label-$field[queryname]'>" . $field['label'] . "</div>";
      }
      $item .= "<div class='view-field view-data-$field[queryname]'>" . views_theme_field('views_handle_field', $field['queryname'], $fields, $field, $node, $view) . "</div>";
    }
    $items[] = "<div class='view-item view-item-$view->name'>$item</div>\n"; // l($node->title, "node/$node->nid");
  }
  if ($items) {
    $output = theme('item_list', $items);
  }
  foreach($nodes as $n){
   $node = node_load($n->nid);
   // itt aztán azt csinálsz vele amit akarsz
  // az output változóba gyűjtöd a dolgokat.
  // persze ha van lapozó, akkor ez a felett fog megjelenni, de csak nem ;))
  }
  return $output;
}
0
0
papa71 képe

Igen köszönöm, de rosszabb a helyzet mint gondoltam.
Sajnos van lapozó és kell is, ami nem azért baj mert fölötte fog megjelenni, hiszen egész egyszerűen itt a templatebe kiteszem egy globális tömbbe a nid-eket és a footerből már azt csinálok vele amit akarok, hanem azért, mert az szétdarabollja a template által megkapott nodes tömböt, így a templét egyszerre nem a teljes listát, hanem csak egy részét kapja. Nekem pedig a teljes lista kéne :(

Annál a megoldásnál maradtam, hogy megírtam újra a lista sql lekérdezéseit, és így gyűjtöm ki a számomra szükséges nodeokat (csak így nem annyira univerzális a megoldás, mintha a programozás nélkül összeállítgatott lista teljes eredményhalmazát kapnám meg és tudnám feldolgozni)

0
0