Simples Modul Content Links
am 13.08.2008 - 10:21 Uhr in
Hallo zusammen,
nachdem ich kein Modul gefunden habe, dass mir auf einfache Art und Weise alle Content Titel als Links oberhalb der Seite anzeigt
(linktocontent brachte bei mir leider kein Ergebnis / theme??) und ich mit dem Modul Views (noch) nicht umgehen kann, habe ich mir etwas ganz simples selbst ausgedacht und programmiert:
// Modul contentlinks
function contentlinks_help($section='') {
$output = '';
switch ($section) {
case "admin/modules#description":
$output = t("Zeigt die Content Links einer Seite oberhalb der Seite an.");
break;
}
return $output;
}
function contentlinks_nodeapi(&$node, $op, $a3 = NULL, $page = FALSE) {
$arr_node = (array)$node;
if ($op == 'load') {
foreach($arr_node as $key => $wert){
if ($key == 'nid'){
drupal_set_message(l($arr_node['title'],'node/'.$arr_node[nid]));
}
}
}
}
// Ende Modul contentlinks
Diese Funktion liefert mir als Ergebnis genau das was ich benötige. Das ganze kann man jetzt noch mit Permissions und ähnlichem erweitern wenn man möchte.
Wenn man jetzt noch als Konvention den Titel als Anker eingibt und den Link mit einer Sprungadresse versieht, kann man sogar noch
auf der Seite bleiben.
Vielleicht hat der eine oder andere ja noch eine Anmerkung oder kann es für sich selbst gebrauchen.
Gruß HaPe
- Anmelden oder Registrieren um Kommentare zu schreiben
Funktion?
am 13.08.2008 - 12:15 Uhr
Hi,
ich verstehe leider nicht so ganz, was du mit dem Modul erreichen willst?
Du schreibst in das für Messages vorgesehene Feld einen Link zum gerade geladenen Node?
Zum einen kann es gut sein, das die Nutzer das garnicht sehen können und zum anderen verstehe ich leider nicht wozu du das tust.
Wenn du eine Liste aller Überschriften mit der Möglichkeit zu diesen zu springen willst, guck dir doch mal das Modul an:
http://drupal.org/project/tableofcontents
Und du müsstest $node nicht in ein Array casten und loopen. $node->nid tut auch das was du willst.
Hab ich aber nicht getestet:
<?php
function contentlinks_nodeapi(&$node, $op, $a3 = NULL, $page = FALSE) {
if ($op == 'load') {
drupal_set_message(l($node->title,'node/'.$node->nid));
}
}
?>
Wenn du verschiedenartige Nodes auflisten willst, guck dir doch bitte mal, wie du schon schreibst, Views an. Das ist nicht schwer und auch gut anpassbar. Und es kann so vieles :)
---
Viele Grüße,
Kars-T
Arbeit: comm-press
Hobbies: Tower Defense HQ, plamo.de, Blog
Viele Grüße,
Kars-T
@ Kars-TIch möchte auf
am 13.08.2008 - 13:03 Uhr
@ Kars-T
Ich möchte auf jeder Seite mit mehrerem Inhalt im Header ein Inhaltsverzeichnis anzeigen (Bsp.: Wiki Seiten).
Probiere das Modul doch einfach mal aus, dann siehst Du was ich damit erreiche.
Wie ich schon schrieb, brachte das Modul tableofcontent bei mir leider keine Ausgabe.
Casten muss ich bei mir das Array, wenn ich das nicht tue, bekomme ich eine leere Seite als Ausgabe.
Die Schleife brauche ich natürlich nicht da hast Du Recht.
Da ich beim klick auf die Content links nicht auf die einzelnen Nodes sondern auf die komplette Seite verlinken möchte habe ich das
ganze wie folgt umgebaut:
function contentlinks_nodeapi(&$node, $op, $a3 = NULL, $page = FALSE) {
if ($op == 'load') {
$arr_node = (array)$node;
$title = menu_get_active_title();
$title = "'".$title."'";
$query = "SELECT path FROM menu WHERE title={$title}";
$queryResult = db_query($query);
$link = db_fetch_object($queryResult);
drupal_set_message(l($arr_node['title'],$link->path.'#'.$arr_node['title']));
}
}
Ich bin noch Drupal Anfänger, deshalb mag das ganze für die Profis etwas seltsam wirken.
Allerdings bin ich auf für simple Lösungen und das ist eine, die für meine Belange funktioniert.
Gruß HaPe
Hallo HaPe, da Du lieber ein
am 13.08.2008 - 16:55 Uhr
Hallo HaPe,
da Du lieber ein neues Modul schreibst, als Views zu erlernen (was ich in gewisser Weise sogar verstehen kann, obwohl es sich echt lohnt sich in Views durchzukämpfen!!) und vielleicht ein paar Tipps gebrauchen kannst, will ich auch hier nochmal meinen Senf dazugeben (schadet hoffentlich keinem).
Also "hook_nodeapi" und "drupal_set_message" ist nicht so doll geeignet, weil der hook nur aufgerufen wird, weil Du noch "node" als Startseite verwendest und die "drupal_set_messages" - naja - auch mal etwas anderes anzeigen, was Deine Liste lustig aussehen läßt (und überhaupt für was ganz anderes gedacht ist, blablabla ...).
Wenn ein neues Modul, dann schau Dir bitte mal die Funktion "node_page_default" im node.module an. Auch, wie es von "node_menu" aus aufgerufen wird. Das ist nämlich die Standard-Startseite. Wenn Du den Code kopierst, alles unnötige rausschmeißt und mit neuem Pfad zur neuen Startseite machst, dann hast Du eine super Lösung.
Viele Grüße
Edmund
------
Drupal Migrationen, Modul- und Themeentwicklung, Drupal Hosting - http://www.katp.de
Drupal Migrationen, Modul- und Themeentwicklung - http://www.klapper.de
Neues Modul
am 14.08.2008 - 10:54 Uhr
@klapper
Ich würde (werde) auch gerne das Modul Views erlernen, aber leider fehlt mir dafür momentan die Zeit.
Du schreibst der hook_nodeapi wird nur aufgerufen, weil ich node als Startseite benutze. Das verstehe ich leider nicht so ganz. Könntest Du mir das bitte näher erklären?
Dass die Funktion drupal_set_messages auch mal was anderes anzeigen könnte, ist natürlich ein Problem, allerdings bisher noch nicht passiert.
Den Ratschlag mit der Funktion node_page_default nehme ich gerne an. Ich werde mir diese Funktion jetzt mal genau anschauen und dann gezielt Fragen stellen.
Vielen Dank für die Hilfe
Gruß HaPe