Wie kann man Core-Module bearbeiten ohne den Core zu hacken? Funktionen Überschreiben?
Eingetragen von soezkan (558)
am 19.03.2011 - 19:46 Uhr in
am 19.03.2011 - 19:46 Uhr in
Hallo Leute,
ich muss das Blog-Module aus dem Core bearbeiten, da ich den View, den mir das Ding erzeugt, editieren möchte.
Wie kann ich darauf Einfluss nehmen? Über die template.php meines Themes?
Danke für Hilfe
Liebe Grüße
Soezkan
- Anmelden oder Registrieren um Kommentare zu schreiben
Hi, oha, du hast anscheinend
am 19.03.2011 - 19:51 Uhr
Hi,
oha, du hast anscheinend eine Menge vor! Generell wird für die Ausgabe ja ein template herangezogen, was sagt, wo was stehen soll!
http://www.drupalcenter.de/node/28900
node-blog.tpl.php
Gibt viele Beispiele dazu. Am einfachsten ist eine extra tpl Datei, die die Anzeige von Blog-Inhalten beeinflusst. Was du dazu machen musst, steht in obenstehenden Link.
Hi Crusher, diese Datei habe
am 19.03.2011 - 19:58 Uhr
Hi Crusher,
diese Datei habe ich schon angelegt und angefangen zu themen. Das Problem dabei ist allerdings, dass ich
die Zeile "Verfasst von admin am 14. März 2011 - 9:24" darüber nicht bearbeiten kann. Darum die Frage.
Hast Du ne Ahnung wie man da ran kommt?
Wenn ich mir bspw. über die Tagcloud was anklicke und er mir alle Einträge mit entspr. Vokabular
ausgibt, steht halt immer diese "Verfasst von ... " drüber. Eigentlich benötige ich nur das Datum: 14.03.2011
Danke
Liebe Grüße
Soezkan
Uff, bin selber noch nen
am 19.03.2011 - 20:10 Uhr
Uff, bin selber noch nen reltiver Newbie.
Also genrell kannst du für alle Inhalte (Seiten, Story, Forenhemen) Author + Datum ausschaltenn über:
/admin/build/themes/settings
Finde nur dort keinen Extra "Blog" Eintrag. Ggf. schaltest du diese Angaben somit dann auch bei Seiten aus, die Author + Datum haben sollen. Könntest damit mal kurz experimentieren.
Lösungsansatz:
In der style.css sorgt .submitted für die Darstellung! Bsp.:
.submitted {
font-size: 0.9em;
color: #999;
}
Wenn du stattdessen dort display: none; reinschreibst, tauch es nicht mehr aus.
ACHTUNG: Betrifft aber alle Seiten, die mit ".submitted" dargesteltl werden. Ggf. schau, ob du für die Blog Seite eine extra ID (z.B. neuer div-Block) dort eintragen kannst. Damit könntest du über CSS dann gezielt nur auf die Blog-Seite ienfluss nehmen.
Sonst fehlt dir nachher überall die Anabe von Datum + Author. Ist ja nicht immer so gewünscht!
Ne, ich wills nicht
am 19.03.2011 - 20:16 Uhr
Ne, ich wills nicht abschalten, ich will es nur teilweise anzeigen lassen
Am einfachsten duplizierts Du
am 19.03.2011 - 20:28 Uhr
Am einfachsten duplizierts Du Dir diesen View (der wird dabei umbenannt). Dann kannst Du in dem neuen View machen was Du willst. Du gibst ihm dann auch einen neuen Pfad und rufst ihn an Stelle des originalen Views auf.
Beste Grüße
Werner
Kann man denn die Blog-"View"
am 19.03.2011 - 21:23 Uhr
Kann man denn die Blog-"View" einfach so duplizieren? Die Ansicht hat ja erstmal nichts mit Views zu tun, oder? Kann mich natürlich täuschen, aber die Auflistung der Blog-Einträge wird durch das Blog-Modul geregelt, nicht durch Views, wenn ich mich recht entsinne.
@topic
Du könntest dir natürlich - wie Werner schon angedeutet hat - mit Views einfach selbst eine View nach deinen Vorstellungen erstellen und dieser dann einen entsprechenden Pfad geben.
Um die Ausgabe "Verfasst von..." zu ändern, musst du in der template.php deines Themes die Theme-Funktion dafür überschreiben: theme_node_submitted
habs nur kurz überflogen,
am 19.03.2011 - 21:36 Uhr
habs nur kurz überflogen, aber ich denke wla meint, du sollst den block weglassen und dir eeinen eigenen mit views bauen und diesen benutzen. damit kannst du das dann machen. aber anders gehts auch....
wie immer...
gruss r.
Danke für eure Antworten.
am 20.03.2011 - 07:17 Uhr
Danke für eure Antworten.
Das Blog-Modul generiert seine Ausgabe aus sich selbst heraus und arbeitet nicht mit einem
View an sich. Leider nicht!
Also ich würde das so
am 20.03.2011 - 09:56 Uhr
Also ich würde das so machen:
in der node.tpl.php des Themes gibt es einen Abschnitt der so oder so äöhnlcih aussieht:
<?php if ($submitted): ?>
<span class="submitted"><?php print $submitted; ?></span>
<?php endif; ?>
in $submitted steht der ganze Text. Es gibt aber auch andere Variablen, die man nutzen kann: http://drupal.org/node/11816#
daher z.B.: obigen Code ersetzen durch
<?php if ($submitted): ?>
<span class="submitted"><?php print $date." | ".$name ?></span>
<?php endif; ?>
Zusatz: Nach der Änderung den Cache leeren !
Ich habe ihm doch schon
am 20.03.2011 - 15:06 Uhr
Ich habe ihm doch schon geschrieben, wie er ganz problemlos direkt den Inhalt der Variable $submitted ändern kann Ô_o
Das Blog-Modul generiert seine Ausgabe aus sich selbst heraus und arbeitet nicht mit einem
View an sich. Leider nicht!
Darum sollst du dir auch mit Views eine eigene Blog-Ausgabe erstellen und sie so gestalten, wie du willst, weil du an diese Views-Ausgaben besser ran kommst. Und diese View kannst du dann verwenden und das Blog-Modul im Grunde abschalten, weil das auch nichts großartig anderes macht, als dir einen Inhaltstyp und eine Auflistung der Nodes dieses Typs zu geben. Sowas macht man sich in Views schnell selbst, passt es an, deaktiviert das Blog-Modul und gibt der View den Pfad /blog - fertig.
Danke schonmal. Wie kann ich
am 20.03.2011 - 15:20 Uhr
Danke schonmal.
Wie kann ich einen View erstellen, der mir nur einen bestimmten Blogeintrag anzeigt, welchen
ich vorher durch Klicken auf den Link: /blog/dienstag-war-schoenes-wetter
Anzeigen lassen möchte?
Öhm... Warum lässt du den
am 20.03.2011 - 15:32 Uhr
Öhm... Warum lässt du den Blog-Eintrag nicht einfach in der normalen Node-Seiten-Ansicht darstellen?
Ansonsten: Gib der View den Pfad /blog/% und übergib den path-alias als Argument oder sowas in die Richtung.
@Exterior: Das ganze ist
am 20.03.2011 - 19:42 Uhr
@Exterior:
Das ganze ist meines Ermessens eine Frage des Aufwandes
Wenn man einem nur die Ausgabe von $submitted nicht passt, dann muß ja nicht das ganze Blog-Modul rausschmeissen und mit Views nochmal programmieren.
Habe ich doch auch nie
am 20.03.2011 - 20:20 Uhr
Habe ich doch auch nie behauptet. Wenn einem echt nur die Submitted-Ausgabe nicht passt, dann benötigt man natürlich nicht Views, sondern ändert diese Ausgabe. Darum hatte ich weiter oben geschrieben, er solle sich mal theme_node_submitted anschauen. Denn ich finde es besser, mit vorhandenen Theme-Funktionen den Inhalt von $submitted zu ändern, anstatt das direkt im Template zu erledigen.
Ich hatte hier das Submitted-Problem und Views als zwei getrennte Sachen betrachtet, schließlich gehören die beiden auch nicht direkt zusammen. Mit Views kann man machen, was man will, wenn man die Nodes in Node-Ansicht liefert, kommt man über Views nicht an die Submitted-Info ran. Daher mein Vorschlag: theme_node_submitted
Wenn man aber allgemein noch mit anderen Dingen der Ansicht unzufrieden ist, sollte man sie evtl. durch eine eigene View ersetzen, statt im Blog-Modul herumzuschreiben.
Jetzt habe ich mal das
am 21.03.2011 - 11:12 Uhr
Jetzt habe ich mal das Blog-Modul komplette gelöscht, also den inhalt von /ROOT/modules/blog/blog.module
Nichts passiert! Sieht alles so aus wie vorher. Wo zum Geier holt sich das System die Ansicht für Blogs nur
her. Ich bin sprachlos ... puh.
Vielleicht noch interessant: Der Breadcrumb sagt: Startseite / Weblogs / Weblog von admin
bei der Ansicht eines einzelnen Blogeintrages.
Hat da jemand ne Ahnung?
Liebe Grüße
Soezkan
Selbst wenn ich das
am 21.03.2011 - 11:29 Uhr
Selbst wenn ich das Core-Blog-Module komplett aus der Installation entferne, bleibt alles wie gehabt.
Was ist denn das? Wie kann das sein?
ICH KAPIER DAS EINFACH NICHT:
wenn man einen Link, namens /blog/heute-ist-schoenes-wetter
aufruft, wie lautet das Template, welches diese Page (Blogpage)
anzeigt?
Weiß das jemand von euch? Wäre ne echte Hilfe!
Dankeschön.
Liebe Grüße
Soezkan
Welches Theme verwendest du ?
am 21.03.2011 - 11:32 Uhr
Welches Theme verwendest du ?
mein eigenes Theme
am 21.03.2011 - 13:52 Uhr
mein eigenes Theme
Hi, hab den Rest kurz nur
am 21.03.2011 - 14:50 Uhr
*
*
* Fehlerhafter Ansatz! Bitte meinen direkt darunterliegenden Post lesen!!
*
*
Hi,
hab den Rest kurz nur überflogen. Hab net so viel Zeit im moment.
1. Was ich oben gschrieben hab, beeinflusst welche Datei Drupal für die blogs heranzieht:
function danland_preprocess_page(&$variables) {
if ($variables['node']->type != "") {
$variables['template_files'][] = "page-node-" . $variables['node']->type;
}
}
Ich hab selber das Subtheme von danland - also danblog! Zwar ist die template.php im danland Ordner, für das Subtheme muss aber die Datei page-node-blog.tpl.php im jeweils aktiven - ggf. auch SUB-Theme - Ordner liegen!
2. Hab den Code aus der node.tpl.php mal testweise in die page-node-blog.tpl.php geschrieben.
Ergebnis: es fehlt im moment noch das komplette Design! Es wird nur Blog-Element - also Datum, Author und der Inhalt - dargestellt.
Hab einfach mal wild Text in die tpl.php eingegragen - "Das ist ein Test". Der wurde auch so auf der Blog-Seite ausgegeben. Also zieht Drupal wirklcih die page-node-blog.tpl.php scheinbar heran.
Ich selber bin kein großer Designer! Es fehlt halt noch die Einbindung der page-node-blog.tpl.php in das Gesamtdesign. Im moment wird wie gesagt nur der Blog dargestellt.
Mir fehlt halt eine Art Include.
So oder so denke ich immer noch, dass man keiensfalls den Core "hacken" muss. Die durch die template.php eingebundene Datei für den Inhaltstypblog muss noch irgendwie mit dem Rest verbunden werden.
Hier mein aktuelles Ergebnis:
Blogdarstellung mit kopierten node.tpl.php
So ich habs! 1. obenstehendes
am 21.03.2011 - 19:46 Uhr
So ich habs!
1. obenstehendes sorgt dafür, dass andere Vorlagen ignoriert werden.
2. Es reicht wenn man
- den Inhalt der node.tpl.php nach node-blog.tpl.php kopiert!
Nur z.B. blog.tpl.php geht nicht. "node-" muss davor stehen.
Konnte somit einfach die Zeile "submitted" auskommentieren.
$submitted ist nur eine Variable, die den String "Verfasst von..." enthält!
function DeinTheme_node_submitted($node) {
return 'Mein Blog Eintrag ' . t('Submitted by dfdsfdsds !username on @datetime',
array(
'!username' => theme('username', $node),
'@datetime' => format_date($node->created),
));
}
function DeinTheme_comment_submitted($comment) {
return 'Mein Kommentar ' . t('Submitted by dfsdfdfsd !username on @datetime.',
array(
'!username' => theme('username', $comment),
'@datetime' => format_date($comment->timestamp)
));
}
Hab den Standard Code mal mit "Mein Blog Eintrag" bzw. "Mein Kommentar" erweitert! Normal macht man das natürlich alles innerhalb von t() - da es ja dann ums übersetzen, etc. geht!
So kannst du aber die Sache ändern
Nur jetzt ist $submitted für ALLE Nodes, bzw. Kommentare geändert! Ggf. solltest du in der template.php einen Schalter einbaune, der auf den Inhaltstyp "blog" eingerichtet ist und nur dann die Funktion überschreibt.
PS: Da du ja nur das Datum haben willst, editier halt einfach die deutsche Übersetzung und trag dort nur:
@datetime ein. Ist zwar nicht so hunderprozentig schön, aber geht natürlich auch!
/admin/build/translate/search
Submitted by !username on @datetime
Submitted by !username on @datetime.
Einmal mit und einmal ohne Punkt (".") am Ende. Warum, wieso @datetime sagt dir ja der obenstehnde Code.
Danke, aber das hatte ich
am 22.03.2011 - 08:01 Uhr
Danke, aber das hatte ich schon längst gelöst. Meine Frage bleibt: wo kann ich das Layout der Blogansicht verändern???
Nicht eines einzelnen Nodes, sondern das komplette Layout, denn es scheint eine page-blog.tpl.php zu geben, welche
die veränderbaren node-blog.tpl.php in sich hineinlädt - das Problem: Die Titel der einzelnen Blogeinträge werden doppelt
angezeigt.
Weiß denn niemand hier im ganzen Forum, wie das "Blogsystem" bzw das Blog-Module arbeitet?
Blog
am 22.03.2011 - 08:29 Uhr
Hallo.
Das Blog-Modul liefert Dir keinen View, sondern erstellt eine eigene Seite mit den Blog-Einträgen. Da das ziemlich unflexibel ist und das Modul auch sonst keine spezielle Funktionalität bietet, wird es mittlerweile nur noch in seltenen Fällen eingesetzt.
Tipp: installiere Dir die Module [do:cck CCK] und [do:views Views] und erstelle Dir einen neuen Inhaltstypen "Blog". Diesen Inhaltstypen kannst Du dann nach Herzenslust gestalten und auch einen eigenen View dafür erstellen.
Stefan
Es geht ja eigentlich alles!
am 22.03.2011 - 09:31 Uhr
Es geht ja eigentlich alles! Nur ist das Problem, dass er mir, klicke ich auf einen einzelnen Punkt, die Überschrift zweimal anzeigt.
Das ist wirklich nervig. Wo kann ich den Code Hacken, mit dem das Blog-Modul das fabriziert?
Der Witz: wenn ich das Blogmodul komplett aus der Installation lösche, passiert garnichts. Wie funktioniert denn das Blogmodul?
Liebe Grüße
Soezkan
Blog
am 22.03.2011 - 09:58 Uhr
Es geht ja eigentlich alles! Nur ist das Problem, dass er mir, klicke ich auf einen einzelnen Punkt, die Überschrift zweimal anzeigt.
Screenshot? Link zur Seite?
Wo kann ich den Code Hacken, mit dem das Blog-Modul das fabriziert?
Gar nicht. Der Code vom Drupal-Kern und von Modulen wird nicht verändert.
Danke für die Antwort. Den
am 22.03.2011 - 10:51 Uhr
Danke für die Antwort. Den Code verändern - ehm, ist doch meine Sache.
Habe es jetzt in der page.tpl.php mit regulären ausdrücken gemacht - oh man.
Was mich wundert wie wird das Blog-Modul denn überhaupt aufgerufen?
Kann ich bitte mal eine Antwort auf die bereits 4mal gestellte Frage haben:
Wie kann es sein, dass ich aus dem Core das Blog-Module lösche und
es trotzdem noch funktioniert?
Wie dem auch alles sei: DRUPAL ROCKT!
Zitat: Was mich wundert wie
am 22.03.2011 - 15:48 Uhr
Was mich wundert wie wird das Blog-Modul denn überhaupt aufgerufen?
Pfad eingeben - Page-Callback wird aufgerufen - dieser gibt sein Zeug aus - fertig
Wie kann es sein, dass ich aus dem Core das Blog-Module lösche und
es trotzdem noch funktioniert?
Wie genau bist du da denn vorgegangen? Hast du das Modul über die Modul-Seite deaktiviert? Lösch danach mal den Drupal-Cache und den Browser-Cache (Strg + F5)
Den Code verändern - ehm, ist doch meine Sache
Ja, ist es. Viel Spaß beim nächsten Update, wenn alle Veränderungen wieder weg sind -,-'
Ist doch echt nicht so schwer. Wirf das unflexible Blog-Modul über Bord und erstelle dir ein eigenes kleines Blog-System mit Views. Ist wesentlich einfacher, du musst nicht im Core herum hacken und am Ende hast du genau das, was du willst. Das ist die beste Lösung, die man dir in diesem Fall vorschlagen kann und die dir jetzt auch schon ein paar mal vorgeschlagen wurde. Warum willst du eigentlich nicht auf die Leute hören, die dir sagen, dass das der beste Weg wäre?
Man kann es sich auch wirklich schwer machen, obwohl's so einfach sein könnte...
@Crusher
All die Arbeit, nur um die Submitted-Info zu ändern? Wirklich, du solltest dir mal theme_node_submitted anschauen, damit geht das um längen einfacher und sauberer.
Hi, ich weiss, hab hier
am 22.03.2011 - 16:07 Uhr
Hi,
ich weiss, hab hier bissel rum editiert.
Öhm, wenn du meinen letzten Post anschauen magst: dort hab ich mit theme_node_submitted gearbeitet!
Hab nur bissel was reingekritzelt, damit man auf anhieb einen Unterschied sieht. Hatte es auch misverstanden. Dachte es geht um die Darstellung des Blog-Moduls!
Ich hab nur 2x Code-Blöcke gewählt, da ja ein blog aus dem node + comments besteht! Wenn du aber mal schauen oben schauen willst, ist es genau der von dir beschriebene Link! Hab nur "theme" durch "MeinTheme" o.ä. ausgetauscht.
mfg Crusher
Hoppla, stimmt, beim
am 22.03.2011 - 17:00 Uhr
Hoppla, stimmt, beim Überfliegen hatte ich mich wohl etwas verlesen, sorry.
Hallo soezkan, 1. Löschung
am 22.03.2011 - 20:41 Uhr
Hallo soezkan,
1. Löschung des Blog-Moduls:
ich weiss ja nicht was du alles gelöscht hast, aber wenn du nur die Datei blog.module löschst, und den Menu-Cache nicht leerst, dann bleiben die Menu-Einträge im Cache und die Callbacks sind aber in der Datei blog.pages.inc.
Deshalb funktioniert auch dein Blog weiterhin.
2.
Es geht ja eigentlich alles! Nur ist das Problem, dass er mir, klicke ich auf einen einzelnen Punkt, die Überschrift zweimal anzeigt.
Das ist wirklich nervig. Wo kann ich den Code Hacken, mit dem das Blog-Modul das fabriziert?
Bitte poste mal eien Screenshot
Hallo zusammen, ich habe es
am 23.03.2011 - 08:43 Uhr
Hallo zusammen,
ich habe es jetzt in der page.tpl.php mit einem regulären Ausdruck gelöst. Nicht die feine Art,
aber es funktioniert.
Bzgl. des Blog-Moduls (Core). Ich hatte ausprobiert und das gesamte Modul, inkl. seinem
Ordner mal testweise gelöscht - es blieb alles beim Alten. Ob ich damals den Cache
gelöscht hatte weiß ich nicht.
Wie dem auch sei, es sieht jetzt alles aus wie es soll - sind halt ein paar if-Abfragen mehr
in der page.tpl.php
Danke euch allen vielmals für all die Hilfe und Inspiration!
Hi, brauch selber immer mal
am 23.03.2011 - 10:59 Uhr
Hi,
brauch selber immer mal wieder Inspirationen. Kannst du mal kurz die markanten Stellen (if-Abfragen) kurz posten? Würd mich interessieren.
mfg Crusher
Was natürlich aus sein kann,
am 23.03.2011 - 11:51 Uhr
Was natürlich aus sein kann, daß du nicht angemeldet warst und der "anonymous" bekommt die Seiten aus dem Cache ...
Mich würde es auch
am 24.03.2011 - 08:46 Uhr
Mich würde es auch interessieren wie du es gelöst hast ...
Also ich mutmaße jetzt
am 24.03.2011 - 13:34 Uhr
Also ich mutmaße jetzt einfach mal. Eine mögliche if-Abfrage ist
if ($node->type == 'blog')
. Diese steht z.B. innerhalb folgender Fuktion:function meintheme_node_submitted($node) {
if ($node->type == 'blog') {
return 'Mein Blog Eintrag ' . t('Submitted by !username on @datetime',
array(
'!username' => theme('username', $node),
'@datetime' => format_date($node->created),
));
}
}
Ansonsten wird die drupal Standardfunktion verwendet. Nur so als kleiner Ansatz."meintheme" durch den jeweiigen theme-Namen ersetzen. Ein Subtheme greift auch auf template.php des "Mutter-Themes" zurück. Somit reicht dann der prim. Theme Name - z.B. "danland", obwohl Theme "danblog" ist.
Man kann if-Abfrage auch noch mit ODER ("||"oder UND ("&&") erweitern und so zig Node-Type Möglichkeiten auf einen Streich erschlagen -
if ($node->type == 'blog' || 'page')
In einer template.tpl.php funktioniert das ähnlich. Zwar werden die Funktionen normal mit template.php angepasst, aber if (node-> type) u.a. funktioniert genauso gut.
@Crusher Also wenn ich das
am 24.03.2011 - 15:39 Uhr
@Crusher
Also wenn ich das oben richtig sehe, geht es schon längst nicht mehr um die Submitted-Info, das ist wohl schon eine ganze Weile abgehakt, sondern um die Ausgabe ganz allgemein...
Ich habs so gelöst:
am 28.03.2011 - 15:19 Uhr
Ich habs so gelöst:
if(!ereg("\/blog\/", $_SERVER["REQUEST_URI"])) {
?><h3><?php
if(ereg(' ', $breadcrumb) || ereg('Weblog', $breadcrumb) || ereg('Diese Seite weiterempfehlen', $breadcrumb)) print "News";
else print $breadcrumb; ?></h3>
<h1 class="title"><?php print $title; ?></h1><?php
}
else {
?><h3 class="noborder"><?php
if(ereg(' ', $breadcrumb) || ereg('Weblog', $breadcrumb)) print "News";
else print $breadcrumb; ?></h3><?php
}