Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Themes & Theming ›

'a class="active"' zu 'span class="active" - blicke nicht durch :(

Eingetragen von Matilda (129)
am 02.02.2011 - 13:31 Uhr in
  • Themes & Theming
  • Drupal 6.x

Hallo zusammen,

ich begreife einfach nicht, was ich anstellen muss, damit ich alle

<a class="active" >Menütitel</a>

ersetzen kann durch

<span class="active" >Menütitel</span>

Es geht also um die primary *und* secondary Links.

Vielen Dank für jeden Tipp in die richtige Richtung!
Herzliche Grüße,
Matilda

‹ Vordefinierte Werte eines CCK Textfeldes in einer Schleife ausgeben Navigation Profilseite / Skytheme Customising ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Hier gibts ne Menge Snippets

Eingetragen von Thoor (3678)
am 02.02.2011 - 14:44 Uhr

Hier gibts ne Menge Snippets um die Links anzupassen: -> http://drupal.org/node/224825
Edit -
nach ein wenig Googlen dürfte das wohl die gewünschte Lösung beinhalten: -> http://drupal.org/node/221382#comment-2271738
Gibt übrigens unzählige Treffer wenn Du nach"drupal add span to primary links" suchst!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Die Snippet-Liste kannte ich

Eingetragen von Matilda (129)
am 02.02.2011 - 16:23 Uhr

Die Snippet-Liste kannte ich noch nicht - und ich suche jetzt seit 3 Tagen nach einer Lösung!

Zitat:

"drupal add span to primary links"

ich habe ja meine Suchanfrage sogar noch spezieller auf meine Frage formuliert, weil ich ja nicht einfach nur ein span-Element hinzufügen möchte, sondern gezielt die a-Elemente, die mit einer class="active" durch Drupal ausgezeichnet sind, rausgreifen möchte und dann durch ein span-Element der gleichen Klasse ersetzen will (und das ganz bewusst.).

Ich möchte dazu nicht unbedingt ein zusätzliches Modul installieren müssen. Ich denke, dass http://drupal.org/node/221382#comment-1464472 oder http://drupal.org/node/221382#comment-2271738 meinem Problem nahe kommen, allein begreife ich nicht, wie ich die Syntax formulieren muss, um dezidiert auf Link class="active" zugreifen zu können.

Mir ist auch nicht klar, was damit gemeint ist, wenn es in dem letzt genannten Post heißt "and use the preprocess_page function in D6." - was soll ich denn mit dem Code von http://api.drupal.org/api/drupal/includes--theme.inc/function/template_p... machen?

Was ich bei den zig Treffern über Google unter anderem auch sehr verwirrend finde ist, dass man oft erst auf den zweiten oder noch weiteren Blick herausfindet, dass da Snippets für ältere Versionen vorgestellt werden. Da probiere ich ja auch per Trial-and-Error, wenn ich nicht zeitnah nachvollziehen kann, ob der jeweilige Code aufwärtskompatibel ist.

Hm, wenn du oder jemand weiteres noch Stubser in die Richtige Richtung für mich hat, bedanke ich mich schon jetzt!
Viele Grüße, Matilda

  • Anmelden oder Registrieren um Kommentare zu schreiben

Matilda schrieb Mir ist auch

Eingetragen von Thoor (3678)
am 02.02.2011 - 19:34 Uhr
Matilda schrieb

Mir ist auch nicht klar, was damit gemeint ist, wenn es in dem letzt genannten Post heißt "and use the preprocess_page function in D6." - was soll ich denn mit dem Code von http://api.drupal.org/api/drupal/includes--theme.inc/function/template_p... machen?

Ja das mit den Versionen it ärgerlichin der Dokumentation. Bzgl. Deiner obigen Frage ... du musst die Funktion in die template.php Deines verwendeten Themes schreiben!

function mytheme_menu_item_link($link) {
  if (empty($link['localized_options'])) {
    $link['localized_options'] = array();
  }
  $link['title'] = $link['title'] = '<span class="link">' . check_plain($link['title']) . '</span>';
  $link['localized_options'] += array('html'=> TRUE);
  return l($link['title'], $link['href'], $link['localized_options']);
}

Das fügst Du einfach in die template.php ein und ersetzt mytheme in function mytheme_menu_item_link($link) mit deinem Theme-Namen, dann aktualisierst Du Dein Theme nochmal und dadurch wird dann die eigentliche Core Funktion für dieses Theme "überschrieben"

Falls Du keine template.php im Theme hast, musst du erst eine anlegen. Kann beispielsweise eine Kopie aus dem GARLAND Theme sein ...

Viel Erfolg!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Da passiert leider rein gar

Eingetragen von Matilda (129)
am 02.02.2011 - 18:41 Uhr

Da passiert leider rein gar nichts - ich habe umbenannt zu:

function secondary_menu_item_link($link)

Ich verwende das genesis-Theme, bzw. habe mir aus genesis-lite mein eigenes subtheme gebaut. In der template.php stehen preprocess-Anweisungen, die man auskommentieren kann, und zwar wie folgt:

/**
* USAGE
* 1. Rename each function to match your subthemes name,
*    e.g. if you name your theme genesis_foo then the function
*    name will be "genesis_foo_preprocess".
* 2. Uncomment the required fucntion to use. You can delete the
*    "sample_variable".
*/

/**
* Override or insert variables into all templates.
*
* @param $vars
*   An array of variables to pass to the theme template.
* @param $hook
*   The name of the template being rendered.
*/
/*
function genesis_ULTRALITE_preprocess(&$vars, $hook) {
  $vars['sample_variable'] = t('Lorem ipsum.');
}
*/

Muss ich damit was machen, um an mein Ziel zu kommen? Wenn ja, was?

Und immer noch mein Problem, wie ich gezielt nur die links rauspicken kann, die das Attribut class="active" haben?

Viele Grüße, Matilda

  • Anmelden oder Registrieren um Kommentare zu schreiben

Matilda schrieb function

Eingetragen von Thoor (3678)
am 02.02.2011 - 19:12 Uhr
Matilda schrieb

function secondary_menu_item_link($link)

Muss ich damit was machen, um an mein Ziel zu kommen? Wenn ja, was?

Erstmal müsstest Du genauer lesen :-) Dein Theme heisst ja nicht secondary, sondern genesis! Oder?

  • Anmelden oder Registrieren um Kommentare zu schreiben

habe ich gemacht - gelesen

Eingetragen von Matilda (129)
am 02.02.2011 - 19:32 Uhr

habe ich gemacht - gelesen meine ich ... du hast geschrieben:

Zitat:

mit deinem menu-Namen

und das menu, das ich zunächst ausprobieren wollte, ist das secondary-menu ...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Matilda schrieb habe ich

Eingetragen von Thoor (3678)
am 02.02.2011 - 19:34 Uhr
Matilda schrieb

habe ich gemacht - gelesen meine ich ... du hast geschrieben:

Zitat:

mit deinem menu-Namen

OK - Ich nehms zurück, war ein Vertipper- habe ihn oben ausgebessert. ... wenn da steht "mytheme" ... dann ist natürlich der Theme-Name gemeint :-) Geht aber trotzdem auf meine Kappe .-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

ich bin einfach mittlerweile

Eingetragen von Matilda (129)
am 02.02.2011 - 19:44 Uhr

ich bin einfach mittlerweile mal wieder etwas verwirrt, so dass ich mich an das Wort hänge ...

leider passiert immer noch so rein überhaupt gar nix :( kein span kein nix :(

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hast Du nach dem Einfügen der

Eingetragen von Thoor (3678)
am 02.02.2011 - 22:12 Uhr

Hast Du nach dem Einfügen der Funktion Deine Theme Registry nochmal aufgebaut, gibts die Funktion vielleicht schon in der template.php und sie ist dann doppelt drin? Hast Du alle Caches geleert?

Und noch ganz anders gefragt ... was versprichst Du Dir denn eigentlich von der gewünschten Änderung? Gehts um CSS Zuweisungen? Verrat dochmal kurz, warum Du das Menu ändern willst.

  • Anmelden oder Registrieren um Kommentare zu schreiben

also wie gesagt: ich habe den

Eingetragen von Matilda (129)
am 02.02.2011 - 22:43 Uhr

also wie gesagt: ich habe den Namen meines Themes eingesetzt, aber das hat auch keine Auswirkung. Ich habe schon gestern einen Ansatz gefunden, der meinem Problem nahe kommt, aber er bezieht sich auf D4.7, und ich blicke nicht durch, wie ich a) den Code in D6 übersetzen kann und b) an meine Bedürfnisse anpassen kann:

http://drupal.org/node/62149#comment-162122

Die für mich interessante Stelle lautet:

if (stristr($index, "active")) {
$img = '<a href="$1" title="$2"><img src="'.base_path() . path_to_theme().'/images/menu/menu_'. $i .'_active.gif" alt="$3"></a>';

und intuitiv müsste nach dem alten Code in folgende Richtung gehen:

if (stristr($index, "active")) {
$activeSpan = '<span class="active">$title</span>';

ich habe eben noch versucht, eine Konstruktion mit active-trail zu bauen - da das einzige Ergebnis jedoch eine stetig wachsende Anzahl von ""warning: Invalid argument supplied usw. irgendewas in theme.inc" war, die ich nur durch eine truncate-cache-Aktion in der Datenbank losgeworden bin, stehe ich nach wie vor auf dem Schlauch :(

Hat vielleicht noch jemand eine Idee?

  • Anmelden oder Registrieren um Kommentare zu schreiben

oh, jetzt habe ich so lange

Eingetragen von Matilda (129)
am 03.02.2011 - 08:14 Uhr

oh, jetzt habe ich so lange gepröddelt, dass ich deine Antwort nicht mitbekommen habe :)

Nein, eben um CSS geht es nicht!! Es geht darum, dass aus Gründen der Nutzerfreundlichkeit eine Seite nicht auf sich selber zeigen soll - wenn ich auf index.html bin, dann muss der Menüeintrag von "oben", auf der grafischen Oberfläche, für sehende Nutzer als aktive Adresse erkennbar sein. Man darf aber nicht mehr klicken können. Die CSS-Pseudklasse :active ist für Tastaturnutzer wichtig, um sich über die Position der Tabtaste auf dem jeweiligen Link orientieren zu können. Im Quellcode muss dann noch zusätzlich das jetzt-span-vorher-a-Element für Screenreadernutzer als aktive Seite gekennzeichnet werden. Z.b. <li><h6 class="screenreader">Aktuelle Seite: </h6><span class="active">Inhaltsverzeichnis</span></li>. Die screenreader-Klasse wird per CSS aus dem sichtbaren Fensterbereich geschubst. Die active-Klasse ist für das visuelle Layout.

Grüße, Matilda

  • Anmelden oder Registrieren um Kommentare zu schreiben

Der Weg über die theme-baren

Eingetragen von McGo (145)
am 03.02.2011 - 08:45 Uhr

Der Weg über die theme-baren Funktione ist schon richtig, wenn man es JavaScript unabhängig machen will. D.h. du musst lernen, wie der Menü Link gebaut wird und die eine eigene Themefunktion überschreiben. Das schrieb Thoor schon in http://www.drupalcenter.de/node/33330#comment-118556. Allerdings ist es hier wichtig, nicht den Code per copy und paste auszuprobieren sondern zu verstehen,was die Zeilen machen. Oder du beauftragst einen Dienstleister deiner Wahl ;)

Alternativ kannst du auch nur über jQuery die Elemente ändern, was vermutlich allerdings nicht unbedingt dein Ziel sein wird.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zitat: D.h. du musst lernen,

Eingetragen von Matilda (129)
am 03.02.2011 - 08:58 Uhr
Zitat:

D.h. du musst lernen, wie der Menü Link gebaut

das ist der Plan.

Zitat:

nicht den Code per copy und paste auszuprobieren sondern zu verstehen,was die Zeilen machen

das geht bei mir ineinander über - ich schleiche mich sozusagen von zwei Seiten an ... ich lese mich durch den Code und muss gleichzeitg Aktionen "spüren", den Mechanismus begreifen, wenn etwas *nicht* funktioniert.

Zitat:

Oder du beauftragst einen Dienstleister deiner Wahl ;)

nix da ;-)

Du hast Recht, jQuery ist hier keine diskutable Alternative für mich.

Trotzdem Dank und morgendliche Grüße,
Matilda

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wie auf pro-retina.de

Eingetragen von Nicolai Schwarz (1071)
am 03.02.2011 - 16:32 Uhr

Ok, weil du mich konkret gefragt hast, wie ich das auf pro-retina.de gelöst habe:
(Habe übrigens die bisherige Diskussion nur überflogen)

Es geht darum, den aktiven Menüpunkt für Screenreader hervorzuheben:

Im template.php eine eigene Funktion hinzufügen. [theme] durch den Namen des eigenes Themes ersetzen. Das ist der Ausgangspunkt.

Zitat:

function [theme]_menu_item_link($link) {
if (empty($link['localized_options'])) {
$link['localized_options'] = array();
}

return l($link['title'], $link['href'], $link['localized_options']);
}

Nun geben wir einfach was anderes aus:

Zitat:

function [theme]_menu_item_link($link) {
if (empty($link['localized_options'])) {
$link['localized_options'] = array();
}

$link_neu = l($link['title'], $link['href'], $link['localized_options']);

// title-Attribut ausfiltern, weil es im Screenreader stoert
preg_match('/title=".*?"/', $link_neu, $filter_title);
$link_neu = str_replace($filter_title[0], "", $link_neu);

// Aktuellen Link hervorheben
if (strpos($link_neu, 'class="active"') !== false) {
return 'Aktuelle Seite'.$link_neu.'';
} else {
return $link_neu;
};

}

Ich habe das nun nicht ausprobiert, meine Funktion macht noch ein paar andere Dinge, die ich hier herausgelassen habe. Probier es mal aus.
(Da ich nicht der PHP-Crack bin, lassen sich meine Änderungen evtl. auch cleverer schreiben.)

NACHTRAG:

Da ich diese Angabe in den lokalen Reitern nicht haben möchte, muss ich sie dort wieder löschen:

function [theme]_menu_local_task($link, $active = FALSE) {
  // Aktuelle Seite an dieser Stelle heraus filtern.
  $link = str_replace('<h6 class="unsichtbar">Aktuelle Seite</h6>', '', $link);
  return '<li '. ($active ? 'class="active" ' : '') .'>'. $link ."</li>\n";
}

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo Nicolai, vielen, vielen

Eingetragen von Matilda (129)
am 04.02.2011 - 03:40 Uhr

Hallo Nicolai,

vielen, vielen Dank! Damit komme ich der Sache auf die Spur - akueller Status: deine Funktion klinkt sich bei mir an der korrekten Stelle eines li-Elementes ein (class = active) ... allerdings nur beschränkt auf die Navigations-Links und nicht auf die primary und secondary Navigation ... aber da komme ich jetzt auch noch hin. Na gut, jetzt nicht mehr, ist schon spät/früh, aber morgen :) oder Samstag ... mein Ergebnis werde ich dann jedenfalls auch hier posten!

Beste Grüße, Matilda

  • Anmelden oder Registrieren um Kommentare zu schreiben

Teillösung - klappt noch nicht für secondary menu

Eingetragen von Matilda (129)
am 20.03.2011 - 06:23 Uhr

Hallo zusammen,
da dachte ich, ich hätte es jetzt begriffen ... ich habe Thors und Nicolais Tipps (und ein wenig Hirnschmalz ;-) ) zusammengefügt und eigentlich kommt jetzt genau das raus, was ich haben möchte ... aber uneigentlich nicht überall - die secondary-links zeigen sich von nachfolgendem Code absolut unbeeindruckt ... die Forenposts, die ich so finde, sind leider wieder sehr wiedersprüchlich - die einen sagen, menu_item_link berührt die secondary links überhaupt nicht, die anderen sagen doch ... was ist da richtig? in welche Richtung müsste ich jetzt weitersuchen?

/* aktive Links sollen keine Links mehr sein ...*/
function genesis_menu_item_link($link)
{
if (empty($link['localized_options']))
{
$link['localized_options'] = array();
}
$link_neu = l($link['title'], $link['href'], $link['localized_options']);
// title-Attribut ausfiltern, weil es im Screenreader stoert
preg_match('/title=".*?"/', $link_neu, $filter_title);
$link_neu = str_replace($filter_title[0], "", $link_neu);
// Aktuellen Link hervorheben
if (strpos($link_neu, 'class="active"') !== false)
{
$link_neu = '<span class="active">' . check_plain($link['title']) . '</span>';
return '<h6 class="screenreader">Aktuelle Seite</h6>'.$link_neu.'';
} else
{
return $link_neu;
};
}

Viele Grüße, Matilda

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Wochen 18 Stunden
  • Hey danke
    vor 2 Wochen 1 Tag
  • Update: jetzt gibt's ein
    vor 2 Wochen 2 Tagen
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 6 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 6 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 4 Tagen
  • In der entsprechenden View
    vor 3 Wochen 4 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 4 Tagen
  • gelöst
    vor 6 Wochen 15 Stunden
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 1 Tag

Statistik

Beiträge im Forum: 250233
Registrierte User: 20453

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 21 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association