Primary links kerdes

zoliky képe

Drupal 6.x-et hasznalok es a kovetkezo kod van a "page.tpl.php" fajlba:

if (isset($primary_links)) { ?><?php print theme('links', $primary_links, array('class' => 'links', 'id' => 'navlist')) ?><?php }

Ez a kovetkezo tartalmat nyomja ki:

<ul id="navlist" class="links">
  <li class="menu-146 first">
    <a title="" href="/sajatoldal/node/1">Az elso link</a>
  </li>
  <li class="menu-147 first">
    <a title="" href="/sajatoldal/node/2">Az masodik link</a>
  </li>
</ul>

Namost en igy szeretnem kilistazni az adatokat:

<ul id="menu">
  <li class="m1">
    <a title="" href="/sajatoldal/node/1">Az elso link</a>
  </li>
  <li class="m2">
    <a title="" href="/sajatoldal/node/2">Az masodik link</a>
  </li>
</ul>

Regen drupal 4.x alatt igy oldottam meg (template.php hack):

function mytheme_primary_links() {
  $links = menu_primary_links();
  if ($links) {
    $output .= '<ul id="menu">';
    $i = 1;
    foreach ($links as $link) {
      $output .= '<li class="m0'.$i.'">' . $link . '</li>';
      $i++;
    }; 
    $output .= '</ul>';
  }
  return $output;
}  

Ugyanezt meg tudnam csinalni Drupal 6.x alatt is ?
Koszonom!

Drupal verzió: 
Fórum: 
pp képe

Mi tart vissza attól, hogy az elsődleges linkeket ne a links, hanem az általad elkészített primary_links sminkelő függvénnyel jelenítsd meg?

pp

0
0
zoliky képe

A problema az, hogy a menu_primary_links(), drupal 6-tol kezdve nem ugy mukodik ahogy elvartam. Szoval fogalmam sincs melyik helyetesitene.

0
0
zoliky képe

Kerdezek okosabbat, megirtam egy kodot:

function mytheme_primary_links() {
  $links = menu_primary_links();
 
  print '<pre>';
  print_r($links['menu-146']['title']);
  print '</pre>';
}

Ahogy latszik probalom megkapni a linkek nevet, csak az a problema, hogy en nem tudhatom mindig melyik a menu, peldaul menu-146 (ez valtozik). Ezt hogyan tudnam megoldani ?

A kodom mar mukodne, kilistaza a class="m01" tagokat, csak a linkek nevet kene megkapjam a $links tomb segitsegevel.

0
0
aboros képe

attól még, hogy nem tudod mik a kulcsok a tömbben, végig tudsz rajta iterálni nem? foreach ($links as $key=>$link){} az miért nem jó?

(figyeted, hogy iterálni? most tanultam, gyakorlom;)

0
0

-
clear: both;

zoliky képe

Igen tudom de ez meg nem oldja meg a problemat. Drupal 6-ban a kovetkezo kod:

foreach ($links as $link) {
        $output .= '<li class="m0'.$i.'">'. $link .'</li>';
}

Ezt nyomja ki: ArrayArray (valoszinuleg azert ketszer, mert ket menu elemem van). Ez drupal 4.7 alatt kinyomja a menut ilyen formaban

<a href="node/1" title="blah blah">Link1</a>

Ugyanezt nem vagyok kepes megvalositani drupal 6-ban ha fejre allok sem!

0
0
crt képe

Olvasd el még egyszer Ádám válaszát különös tekintettel a foreach használatára.

Üdv: Zoli

0
0
zoliky képe

igen ,probaltam igy de nem mukodik:

foreach ($links as $key => $link) {
     $output .= '<li class="m0'.$i.'">'. $key[$link] .'</li>';
}

Az kimenet ez: ee

Szerintem nem iteracio problema van itt.

0
0
Tgr képe

Itt user probléma van, el kéne olvasnod, hogyan működik a foreach, nem találomra próbálgatni különféle teljesen értelmetlen változónév-kombinációkat. Vagy ha nagyon nem szeretsz olvasni, próbáld ki:

print_r($links);
foreach ($links as $key => $link) {
  print_r($key);
  print_r($link);
}
0
0
aboros képe

csak egy tipp, de tulajdonképpen, ha jól értem be akarod sorszámozni a li tagokat.
a theme_links() -el meg tudod ezt csinálni.
http://api.drupal.org/api/function/theme_links

én azt csinálnám, hogy ezt a függvényt bővíteném még egy attribútummal és ha az true, akkor be is sorszámozom az elemeket... így:

function playground_links($links, $attributes = array('class' => 'links'), $numbering = FALSE) {
  $output = '';
 
  if (count($links) > 0) {
    $output = '<ul'. drupal_attributes($attributes) .'>';
 
    $num_links = count($links);
    $i = 1;
 
    foreach ($links as $key => $link) {
      $class = $key;
      //
      // Figyelj, itt változik az eredetihez képest
      //
      if ($numbering){
        $class .= ' item-'.$i;
      }
      // Ennyi volt a változás ;)
 
      // Automatically add a class to each link and also to each LI
      if (isset($link['attributes']) && isset($link['attributes']['class'])) {
        $link['attributes']['class'] .= ' ' . $key;
      }
      else {
        $link['attributes']['class'] = $key;
      }
      // Add first and last classes to the list of links to help out themers.
      $extra_class = '';
      if ($i == 1) {
        $extra_class .= 'first ';
      }
      if ($i == $num_links) {
        $extra_class .= 'last ';
      }
      $output .= '<li '. drupal_attributes(array('class' => $extra_class . $class)) .'>';
 
      // Is the title HTML?
      $html = isset($link['html']) && $link['html'];
 
      // Initialize fragment and query variables.
      $link['query'] = isset($link['query']) ? $link['query'] : NULL;
      $link['fragment'] = isset($link['fragment']) ? $link['fragment'] : NULL;
 
      if (isset($link['href'])) {
        $output .= l($link['title'], $link['href'], $link['attributes'], $link['query'], $link['fragment'], FALSE, $html);
      }
      else if ($link['title']) {
        //Some links are actually not links, but we wrap these in <span> for adding title and class attributes
        if (!$html) {
          $link['title'] = check_plain($link['title']);
        }
        $output .= '<span'. drupal_attributes($link['attributes']) .'>'. $link['title'] .'</span>';
      }
 
      $i++;
      $output .= "</li>\n";
    }
 
    $output .= '</ul>';
  }
 
  return $output;
}

aztán a page.tpl.php -ban így íródik ki a primary_links:

 if (isset($primary_links)) {
  print theme('links', $primary_links, array('class' => 'links primary-links'), TRUE) 
}

(eredetileg ugye az a TRUE nincs benne, azt most fűztük bele)

0
0

-
clear: both;

aboros képe

akkor még sokkal egyszerűbben is meg tudod oldani, így:
template.php

function playground_preprocess_page(&$vars){
  $i = 1;
  $newlinks = array();
  foreach ($vars['primary_links'] as $link) {
    $newlinks['item-'.$i] = $link;
    $i++;
  }
  $vars['primary_links'] = $newlinks;
}

ez kiszedi a menu-123 class -okat a li -kből és helyette item-1, item-2, item-3.. stb lesz. ha megfelel. ;)

0
0

-
clear: both;

Genesis képe

Drupal 5-ben sikerült módosítanom a Primary links menüt egy template.php-ba tett themename_primarylinks nevű függvénnyel, a sminkben pedig elhelyeztem egy ilyet:
 print theme('primarylinks', $primary_links, array('class' => 'links primary-links'))
De miért nem megy ugyanez Drupal 6-ban?
Előre is köszönöm a segítséget!

0
0
aboros képe

drupal 6 óta létezik ez a theme registry. ha új .tpl.php filet vezetsz be vagy új függvényt írsz a template.php -ba, akkor ürítened kell ezt a theme registry -t, hogy belekerüljön az új függvényed. ezt meg tudod úgy tenni például, hogy ellátogatsz az admin/build/themes oldalra és mentesz egyet.

amikor már létező függvényeket módosítasz, akkor nem kell ezt tenni, csak akkor mikor teljesen új függvényt vezetsz be.

0
0

-
clear: both;

Genesis képe

Igen, és annyi történik, hogy eltűnik a Primary links. De nem értem, miért!
Esetleg van egyéb ötleted?
Mindenesetre köszönöm az eddigi segítséged! :-)

0
0
aboros képe

be tudod ide másolni a SMINKNEVE_primarylinks függvényedet? meg esetleg a page.tpl.php vonatkozó részét?

ha nem úgy hívod meg, hogy theme('primarylinks', .. hanem SMINKNEVE_primarylinks -el hívod 'direktbe' akkor se csinálja?

ha belevarrsz egy drupal_set_message('WTF?'); sort a függvényedbe, megjelenik az üzenet?

0
0

-
clear: both;

Genesis képe

Igaz, a print sminknev_primarylinks($primary_links, array('class' => 'links primary-links')); -el megy, a theme-es hívással valamiért nem. Végülis így is jó, bár nem értem, miért nem megy! :-)
Eddig egyébként úgy oldottam meg, hogy az includes/theme.inc fájl theme_links függvényét írtam át. Így most legalább azt visszaállíthattam az eredetire.
Hálás köszönetem! :-)

0
0
pp képe

Nincs olyan, hogy theme_primarylinks tehát hiába tolod be a függvényedet, ha nincs ilyen smink hook, hogy primarylinks.

A theme.inc-t módosítása meg LOL. Pláne, ha a theme_links függvényt módosítod, mert arra van a mechanizmus pont, hogy ilyet ne keljen. Egyszerűen létrehozod a sminkneve_links függvényt és kész is vagy.

pp

0
0
Genesis képe

Már világos, köszönöm!
Meglepő számomra, mert Drupal5-ben volt ilyen.
Mivel nem minden linket akarok módosítani, ezért - nem theme hook-ként - továbbra is használom a függvényemet!
Még egyszer köszönöm mindkettőtöknek! :-)

0
0