"lesbare" URL für t("read more") mit PHP-Feld in Views3 erzeugen
am 17.10.2012 - 15:22 Uhr in
also der Reihe nach:
1. wenn ich in einem pageView den "Content" ausgeben lasse, bekomme ich auf den listing-Seiten den teaserText mit einem "read more"-Link zur Detailansicht des node (zusätzlich zum verlinkten Titel).
2. wenn ich stattdessen als Ausgabe "Felder" festlege, und dann "Inhalt:Title" und "Inhalt:Body" ausgebe, bekomme ich den Titel und den Teaser, aber keinen more-Link mehr (ist offenbar ein D7-Bug ?).
3. das Feld "Inhalt:Link" liefert zwar einen Link zum node, aber mit dem Label "Ansicht"
- das kommt aus $text = !empty($this->options['text']) ? $this->options['text'] : t('view'); in der "views_handler_field_node_link.inc",
wenn ich hier t("read more") eintrage, geht's wie gewünscht, ABER das soll man ja nicht !
4. also ein "Global:PHP"-Feld, dort als Output Code:
echo "<a href ='".$GLOBALS['base_url']."/node/".$row->nid."'>".t("read more")."</a>";
damit geht's (das $row->nid kommt aus dem zusätzlich angelegten "Inhalt:Nid"-Feld), ALLERDINGS hat die Verlinkung jetzt keine lesbare URL mehr, obwohl "pathauto" aktiviert ist, und sonst auch funktioniert.
5. die Lösung hab ich hier gefunden:
"Global:PHP", Output Code:
$link = $GLOBALS['base_url']."/node/".$row->nid;
echo "<a href ='".drupal_lookup_path('alias',$link)."'>".t("read more")."</a>";jetzt das Problem:
Ich habe einen Hauptmenü-Punkt (sagen wir "mainmenu_2") zu diesem View verlinkt, wo alle Inhalte eines bestimmten Content-Types ("XXX") aufgelistet werden - funktioniert wie oben beschrieben.
Zu diesem Hauptmenü-Punkt gibt es nun mehrere Unterpunkte, welche nur Inhalte dieses Typs auflisten sollen, die einem bestimmten Term aus verschiedenen Taxonomien zugeordnet sind.
Dazu hab ich für diese Unterpunkte jeweils einen weiteren View mit entsprechendem Filter angelegt, z.B. so:
Inhalt Typ (= XXX)
Inhalt Tax_1(=aaa)
Diese Untermenü-Views haben als Pfadangabe sowas wie "/mainmenu_2/submenu_1", damit das im breadcrumb auftaucht.
Das Problem ist nun, das die wie oben beschriebenen "read more"-Links auf nodes zeigen wie "[baseURL]/mainmenu_2/nodeName", die natürlich nicht existieren,
- beim Hauptmenü-View wird dagegen richtig "[baseURL]/nodeName" ausgegeben (der Hauptmenü-View hat den Pfad "/mainmenu_2").
Und seltsam ist: wenn ich bei der Erzeugung des "read more"-Links die Umwandlung mit drupal_lookup_path('alias',$link) weglasse, werden die Links richtig ausgegeben, aber eben nur als "[baseURL]/node/nid" - was ja nicht sein sollte.
In der Hoffnung, daß sich jemand hier durchfindet und einen Rat hat -
mfG, Michael
- Anmelden oder Registrieren um Kommentare zu schreiben

Ohje. Die Lösungsansätze 1-5
am 17.10.2012 - 21:45 Uhr
Ohje. Die Lösungsansätze 1-5 sind ja gruselig. Views bietet dir was du sucht als Feld "Inhalt: Pfad" schon direkt an. Dein Problem hat sich damit auch erledigt, da der Pfad absolut zum Drupalverzeichnis erzeugt wird und nicht wie in deinem Beispiel relativ ist. Hättest du vor deinem drupal_lookup_path noch einen "/" eingebaut hätte es wohl auch funtkioniert aber die Lösung über das Feld ist definitiv zu empfehlen.
Gruß
Achso, um den Link dann auch
am 17.10.2012 - 22:09 Uhr
Achso, um den Link dann auch als Link zu nutzen musst du bei dem Pfad Feld die Ausgabe überschreiben und zwar in etwa so:
<a href="[path]">weiterlesen</a>Gruß
Vielen Dank, aber
am 18.10.2012 - 08:43 Uhr
das Problem ist, daß ich da nicht "weiterlesen" reinschreiben will, sondern die PHP-Funktion t("read more") - für die Mehrsprachigkeit, und das geht ja wohl in dem Rewrite-Output-Feld nicht, sondern nur in einem PHP-Feld.
Aber der Hinweis mit dem vorangestellten "/" vor dem drupal_lookup_path() war wichtig - ich hatte es vorher statt mit der baseURL so versucht:
href = drupal_lookup_path("alias", "/node/".$row->nid)was natürlich auch nicht ging.
$link = "node/".$row->nid;echo "<a href ='/".drupal_lookup_path('alias',$link)."'>".t("read more")."</a>";
so funktioniert es jetzt - vielen Dank also.
mfG, Michael
Was ist an dieser Vorgehensweise eigentlich gruselig?