[gelöst]weiterlesen-Link ausblenden wenn nicht genug Text
am 02.12.2011 - 19:03 Uhr in
Hallo Leute,
ich hätte mal eine interessante Aufgabe zu lösen :-)
Ich möchte bei den Teaser-Nodes/Anrisstext erreichen, dass der"weiterlesen-Link" nur vorhanden ist wenn auch genug Text vorhanden ist
(also wenn der ganze Text länger als die gekütze Version vom Text ist - oder anders gesagt noch mehr in der full-Page Ansicht/Vorgabe zu lesen sein soll.
Wenn also der Text zu dem Artikel-Node, nicht länger ist als die Zusammenfassung/getrimmt (also die eingestellte Textlänge z.B. Länge kürzen: 350) ,
sollte im Teaser-Node/Anrisstext der "weiterlesen-Link" bzw. der "Node-footer" ausgeblendet werden.
Ist ja eigentlich "nur" eine logische if-Abfrage.... hm.. aber wo ansetzten ;-)
Wär cool wenn wir hier eine gemeinsame Lösung finden würden.
Ich denke dieses Feature könnten mehr hier gebrauchen :-)
lg, bernsch
- Anmelden oder Registrieren um Kommentare zu schreiben

Dieses Problem habe ich auch
am 02.12.2011 - 19:34 Uhr
Dieses Problem habe ich auch schon länger.
Eigentlich sollte Drupal das können. Ich glaube mal gelesen zu haben, dass es ein Bug in Drupal ist.
Würde mich auch über eine Lösung freuen :)
Wüsste nicht, was daran ein
am 02.12.2011 - 22:16 Uhr
Wüsste nicht, was daran ein Bug sein soll.
Und das Problem lässt sich bestimmt recht locker über die node.tpl.php umgehen. Darin einfach die Länge des Body-Feldes prüfen und bei Bedarf den Weiterlesen-Link ausblenden.
http://www.drupalcenter.de/no
am 03.12.2011 - 20:58 Uhr
http://www.drupalcenter.de/node/37350
Ich hätte gern einen
am 04.12.2011 - 13:21 Uhr
Ich hätte gern einen Issue-Link oder ähnliches. Nur weil irgendjemand - der sich ohnehin sehr viel über Drupal beschwert - sagt, dass das ein Bug ist, muss es noch lange nicht stimmen.
Ansonsten: node.tpl.php bearbeiten, ist eine Sache von höchstens 5 Minuten.
Exterior schriebAnsonsten:
am 05.12.2011 - 15:17 Uhr
Ansonsten: node.tpl.php bearbeiten, ist eine Sache von höchstens 5 Minuten.
Vielleicht kann ja jemand kurz den Code dazu posten.... Das würde dann allen hier helfen ;-)
DANKE!
read more
am 05.12.2011 - 16:35 Uhr
Nur als Referenz, falls jemand noch ein wenig Lektüre benötigt: http://drupal.org/node/823380.
Das "Problem" bei Drupal 7 ist: das Body-Feld ist nicht mehr das, was es früher einmal war. Jetzt kann ein Node mehrere oder auch kein Feld mit Summary haben, insofern lässt sich nicht verlässlich bestimmen, ob ein Teaser genau das zeigt, was auch im Full-Node sichtbar ist.
Auch über Code in der node.tpl.php lässt sich das Problem nicht einfach lösen. Dazu müsste man nämlich erstmal festlegen, wann genau ein Node weiteren Inhalt hat (und genau das ist aus oben genannten Gründen recht kompliziert).
Lösungsversuch?
am 06.12.2011 - 13:03 Uhr
Da ja hier viele langjährige Druperlaner und Programmierer am Werk sind, würd ich mich bzw. einige hier in der Drupal-Community über einen Lösungsversuch freuen.
Wenn ich das richtig verstanden habe ist das item um was es geht die "Zusammenfassung" bzw. der "gekürzter Text" und deren eingestellte Zeichenzahl, bis der Node auf Full-Ansicht zum weiterlesen geht, das "Zünglein an der Waage". Logisch wär hier eine if-Abfrage in der node.tpl.php die schaut ob die eingestellte Textzahl erreicht/überschritten wurde oder nicht.
Also WENN die Textlänge kleiner oder gleich ist als die eingestellte Zeichenzahl, DANN weiterlesen Link bzw. "node-footer" AUSBLENDEN sont weiterlesen-Link bzw. nodefooter ANZEIGEN
Ich schätze mal das die Einstellung in der "Anrisstext" EInstellung das Problem sind. Lieg ich da richtig?
Glaubt ihr, bringen wir hier was zusammen?
lg
Teaser
am 06.12.2011 - 13:39 Uhr
Ich schätze mal das die Einstellung in der "Anrisstext" EInstellung das Problem sind. Lieg ich da richtig?
Nein, nicht ganz.
Das Problem ist, dass es nicht mehr *das eine* (Body-)Feld gibt, dass in zusammengefasster Form dargestellt werden kann. Du kannst theoretisch 10 oder 100 Felder in einem Inhaltstypen haben, die vom Typ "Summary" sind. Genauso gut kannst Du dieses Feld auch komplett wegnehmen.
Mit einer einfachen If-Abfrage ist es also nicht getan. Nicht umsonst ist der von mir verlinkte Beitrag auf drupal.org schon etwas länger und auch dort bisher ohne eine wirkliche Lösung geblieben.
Aber der Anwender bzw.
am 06.12.2011 - 15:55 Uhr
Aber der Anwender bzw. Website-Betreiber weiß doch, welche Felder er zum "Inhalt" zählt und welche nicht. Ergo müsste er in der IF-Anweisung doch die Längen der gewünschten Felder summieren und auswerten können, oder? Eine allgemeingültige Lösung, die jeder verwenden kann, wird das natürlich nicht, aber die könnte man ja für seinen speziellen Fall anpassen und die Felder auswerten, die einem richtig scheinen.
Codeschnipsel?
am 22.12.2011 - 15:01 Uhr
Kann man hier vielleicht eine Art Codeschnippsel ins Forum stellen. Wo man nur mehr die Feld-Namen austauschen muss oder ähnliches?
Vl. jemand die Motivation sich hier einzubringen. Ich bin leider nicht so gut in PHP und Co. :-(
Denke das würden einige Admins in ihren Seiten gut brauchen können...
Liebe Grüße
Exterior schriebNur weil
am 22.12.2011 - 19:15 Uhr
Nur weil irgendjemand - der sich ohnehin sehr viel über Drupal beschwert - sagt, dass das ein Bug ist, muss es noch lange nicht stimmen.
Was soll das bitte heißen, "irgendjemand - der sich ohnehin sehr viel über Drupal beschwert" ? Genauso gut könnte ich dich als "irgendjemand - der sich an Drupal_7 wegen seiner Bugs gar nicht traut und null Ahnung von der Materie hat" bezeichnen.
Zitat: Was soll das bitte
am 22.12.2011 - 21:22 Uhr
Was soll das bitte heißen, "irgendjemand - der sich ohnehin sehr viel über Drupal beschwert" ?
Das soll heißen, dass man hier im Forum einige Beiträge findet, in denen du dich recht ausgelassen über Drupal und speziell um die Kinderkrankheiten der 7er Version beschwerst. Nicht mehr und nicht weniger.
Genauso gut könnte ich dich als "irgendjemand - der sich an Drupal_7 wegen seiner Bugs gar nicht traut und null Ahnung von der Materie hat" bezeichnen.
Tu' dir keinen Zwang an, über sowas stehe ich locker drüber, da ich erstens weiß, dass ich Drupal 7 nicht verwende, weil ich mein momentanes Projekt damit gar nicht ordentlich aufziehen kann und weil ich mir zweitens ziemlich sicher bin, dass ich dir in Sachen Drupal-Materie einiges voraus habe und durchaus über einiges an KnowHow diesbezüglich besitze.
Und drittens, weil ich mich pauschal nicht angegriffen fühle.
Exterior schrieb Das soll
am 22.12.2011 - 22:10 Uhr
Das soll heißen, dass man hier im Forum einige Beiträge findet, in denen du dich recht ausgelassen über Drupal und speziell um die Kinderkrankheiten der 7er Version beschwerst. Nicht mehr und nicht weniger.
Das ist aber noch kein Grund, meine Behauptung bezüglich eines Bugs in Frage zu stellen. Ich habe mich im Gegensatz zu dir sehr intensiv mit Drupal_7 beschäftigt und war oft wegen dieser "Kinderkrankheiten" sehr frustriert. Die meisten Probleme habe ich auf eigene Faust gelöst und habe nicht nach jeder Kleinigkeit hier im Forum gefragt, wie das so manche Anfänger tun. Ich habe nur dann gefragt, wenn entweder mich die Zeit dazu gedrängt hat, eine schnelle Lösung zu finden oder wenn ich selber schon wirklich keine Geduld mehr hatte und wusste nicht mehr weiter.
und weil ich mir zweitens ziemlich sicher bin, dass ich dir in Sachen Drupal-Materie einiges voraus habe und durchaus über einiges an KnowHow diesbezüglich besitze.
Gut, ich meinte speziell Drupal_7-Materie und das in diesem Thread angesprochene Problem..
Zitat: Das ist aber noch kein
am 22.12.2011 - 22:43 Uhr
Das ist aber noch kein Grund, meine Behauptung bezüglich eines Bugs in Frage zu stellen.
Ich habe lediglich gesagt, dass ich einen Link haben will, wo darüber diskutiert wird, dass es sich um einen Bug handelt. Das hatte in erster Linie überhaupt nichts mit dir zu tun, sondern es ging mir nur darum, dass manche Leute glauben, es handelt sich um einen Bug, obwohl's exakt so gedacht ist. Sowas kommt vor, deswegen verlasse ich mich bei sowas nicht auf die Aussage eines einzelnen.
Und trotzdem muss man sich nicht so ausdauernd Luft machen, weil man frustriert ist. Mit sowas muss man in der Informatik rechnen. Sorry, aber das ist eben meine Meinung dazu, wenn ich mir auf Arbeit jedes mal so ordentlich Luft machen würde, weil ich frustriert bin, wenn etwas nicht klappt, dann wäre ich schon längst rausgeflogen.
Mag durchaus sein, dass ich mich bisher nicht eingehend mit D7 beschäftigt habe. Aber eben aus besagten Gründen und nicht wegen der Kinderkrankheiten. Ändert nichts daran, dass ich mich mit Drupal allgemein ganz gut auskenne. Aber ehrlich gesagt möchte ich hier gar keine Diskussion anfangen, wer was besser kann, weil sowas fruchtlos ist und außerdem in diesem Forum nichts zu suchen hat.
Das in diesem Thread angesprochene Problem ließe sich für den Einzelfall wie gesagt über's Templat recht simpel lösen. Alle Felder nehmen, die man selbst zum "Inhalt" zählt, deren Länge ermitteln (strlen), addieren und auswerten. Wenn's kleiner ist als ein bestimmter Wert, nimmt man den Link aus dem Template. Das dürfte es gewesen sein.
Ich hätte hier auch schon mal ein Snippet gepostet, aber ich habe momentan keine Zeit, eine D7-Testinstallation hochzuziehen und das ganze zu testen. Aber poste du doch den entsprechenden Code.
Und das ist jetzt nicht als "Bäh, mach es doch selber" zu verstehen, sondern als ernst gemeintes Ansinnen, denn du dürftest ja eine D7-Installation parat haben und die Node-Struktur von D7 kennen. Mir fehlt dafür momentan leider echt die Zeit.
Exterior schrieb Und trotzdem
am 22.12.2011 - 23:47 Uhr
Und trotzdem muss man sich nicht so ausdauernd Luft machen, weil man frustriert ist. Mit sowas muss man in der Informatik rechnen. Sorry, aber das ist eben meine Meinung dazu, wenn ich mir auf Arbeit jedes mal so ordentlich Luft machen würde, weil ich frustriert bin, wenn etwas nicht klappt, dann wäre ich schon längst rausgeflogen.
Ich habe nicht "jedes mal" Luft gemacht, wenn ich frustriert war, sondern nur dann, wenn sozusagen der Fass übergelaufen war. Dass man mit sowas in der Informatik rechnen muss, weiß ich ganz gut. Ich kann dir versichern, dass ich ein sehr geduldiger Mensch bin und mache immer auch da weiter, wo alle anderen schon längst aufgegeben haben. Trotzdem war es für mich manchmal einfach zu viel, vielleicht deswegen, weil ich auch immer mehr oder weniger bewusst mit anderen CMS verglichen habe.
Das in diesem Thread angesprochene Problem ließe sich für den Einzelfall wie gesagt über's Templat recht simpel lösen. Alle Felder nehmen, die man selbst zum "Inhalt" zählt, deren Länge ermitteln (strlen), addieren und auswerten. Wenn's kleiner ist als ein bestimmter Wert, nimmt man den Link aus dem Template. Das dürfte es gewesen sein. Ich hätte hier auch schon mal ein Snippet gepostet, aber ich habe momentan keine Zeit, eine D7-Testinstallation hochzuziehen und das ganze zu testen. Aber poste du doch den entsprechenden Code.
Ich habe dieses Problem bei mir anders gelöst.
Mir fehlt dafür momentan leider echt die Zeit.
Sorry aber mir fehlt dazu sowohl die Zeit als auch die Lust, Deine "recht simple Lösungen" praktisch umzusetzen. Eine Drupal_7-Neuinstallation auf XAMPP dauert aber weniger als 5-Minuten.
read more | Code
am 23.12.2011 - 08:31 Uhr
Nunja.. schade das keiner die 10 Minuten Zeit hat hier einen Code zu posten der vl. einigen hier sehr helfen könnte... Dann hätte man wenigstens einen Basiscode den jeder für sich anpassen könnte bzw. einen Denkanstoss für den entsprechenden Code...
(Mir ist schon klar das es sicher mehr sind als 10 Minuten ;-) .. aber naja.. das steht ja oben so... - "5 Min für die Testinstallation" und "5 Min fürs Code schreiben" ... *gg*)
Ich hätte hier auch schon mal ein Snippet gepostet, aber ich habe momentan keine Zeit, eine D7-Testinstallation hochzuziehen und das ganze zu testen.
Ich hätte nach dem Beitrag gesucht, doch leider nichts gefunden...
Das in diesem Thread angesprochene Problem ließe sich für den Einzelfall wie gesagt über's Templat recht simpel lösen. Alle Felder nehmen, die man selbst zum "Inhalt" zählt, deren Länge ermitteln (strlen), addieren und auswerten. Wenn's kleiner ist als ein bestimmter Wert, nimmt man den Link aus dem Template. Das dürfte es gewesen sein...
Dann werde ich das wohl oder übel mal probieren müssen... - muss ich das in der template.php über preprocessor ansprechen --> themename_preprocess_node ???
Anscheinend beschäftigt das Thema mehrere Leute - da hier schon ein eigenes Project im entstehen ist... mal sehen was das kann und hoffen das es auch mein Problem löst... :-)
Liebe Grüße
@Joenet Wie bereits
am 23.12.2011 - 15:37 Uhr
@Joenet
Wie bereits befürchtet und erwähnt ist diese Unterhaltung recht fruchtlos. Und da mit dir anscheinend eine vernünftige, sachliche Diskussion nicht möglich ist, weil du gleich an die Decke gehst und dich persönlich angegriffen fühlst, wenn man ein paar Fakten aufzählt, werde ich deinen letzten Beitrag einfach größtenteils ignorieren. Nur eines möchte ich an dieser Stelle los werden:
Ich habe dieses Problem bei mir anders gelöst.
Der TE sucht an dieser Stelle nach einer Lösung und du schreibst ihm hier, dass du dieses Problem bei dir anders gelöst hast, ohne ihm zumindest einen kleinen Hinweis zu geben, wie er das machen kann. Wirklich ein sehr wertvoller Beitrag zur Community...
So, zum Thema:
Ich habe mir heute in der Mittagspause mal eine Test-Installation aufgesetzt und das mal am Bartik-Theme durchprobiert.
Dort findet sich in der node.tpl.php folgende Stelle:
<?php
// Remove the "Add new comment" link on the teaser page or if the comment
// form is being displayed on the same page.
if ($teaser || !empty($content['comments']['comment_form'])) {
unset($content['links']['comment']['#links']['comment-add']);
}
// Only display the wrapper div if there are links.
$links = render($content['links']);
if ($links):
?>
Das kann man z. B. so ändern:
<?php
// Remove the "Add new comment" link on the teaser page or if the comment
// form is being displayed on the same page.
if ($teaser || !empty($content['comments']['comment_form'])) {
unset($content['links']['comment']['#links']['comment-add']);
}
$lengthGesamt = 0;
$felder = array('body', 'field_body2', 'field_body3');
foreach ($felder AS $feldname)
{
$feldItems = $content[$feldname]['#items'];
foreach ($feldItems AS $item)
{
$value = strip_tags($item['value']);
$lengthGesamt += mb_strlen($value, 'utf8');
}
}
if ($lengthGesamt < 250)
{
unset($content['links']['node']['#links']['node-readmore']);
}
// Only display the wrapper div if there are links.
$links = render($content['links']);
if ($links):
?>
In das Array
$felderträgt man alle Feldnamen ein, die man zum Inhalt zählt. Die Schleife geht dann die Inhalte dieser Felder durch, wirft das HTML-Markup raus (damit das nicht mit gezählt wird; bei der Anzeige bleibt's natürlich drin), zählt die Länge jedes Feldes (auf UTF-8 codiert, sonst zählen Umlaute doppelt) und addiert das ganze. In der Zeile<?php if ($lengthGesamt < 250) ?>kann man die Anzahl der Zeichen angeben, wann der "Weiterlesen"-Link erscheinen soll. In diesem Beispiel wird der Link ausgeblendet, wenn die Felder "body", "field_body2" und "field_body3" zusammen weniger als 250 Zeichen haben.Das ganze kann und muss man natürlich auf seine persönlichen Bedürfnisse, das Theme etc. anpassen, aber im groben dürfte es so funktionieren.
Exterior schrieb Und da mit
am 23.12.2011 - 17:07 Uhr
Und da mit dir anscheinend eine vernünftige, sachliche Diskussion nicht möglich ist, weil du gleich an die Decke gehst und dich persönlich angegriffen fühlst, wenn man ein paar Fakten aufzählt, werde ich deinen letzten Beitrag einfach größtenteils ignorieren.
Ja, ja, klar, ein guter Ausweg, wenn einem die Argumente für eine "sachliche Diskussion" fehlen. Ich bin nur einmal in diesem Forum an die Decke gegangen als ich von jemandem direkt beleidigt wurde und daran kannst Du dich anscheinend sehr gut erinnern.
Der TE sucht an dieser Stelle nach einer Lösung und du schreibst ihm hier, dass du dieses Problem bei dir anders gelöst hast, ohne ihm zumindest einen kleinen Hinweis zu geben, wie er das machen kann. Wirklich ein sehr wertvoller Beitrag zur Community...
Mein Problem war zwar auch mit dem "read more"-Link verbunden aber trotzdem anders. Mir ging es darum, wie man "read more" speziell auf der Startseite ausblenden kann, wenn sie nur aus einem einzigen Artikel in der Vollansicht besteht. Es war also keine mangelnde Hilfsbereitschaft von mir, dass ich diese Lösung hier nicht erwähnt habe.
DANKE!!!
am 23.12.2011 - 17:32 Uhr
So ihr "Streithanseln"... aufhören.. es ist Weihnachten :-) - Will ja hier nicht Schuld sein, dass Ihr euch da wegen meinem Thread hier gegenseitig anzickt ;-)
@Exterior: Super, DANKE - das du dir die Mühe gemacht hast den Code hier zu posten... Ist echt hilfreich wenn man einen Lösungsansatz bzw. was zum anschaun hat! DANKE nochmal!!! Ich werde das gleich nach den Feiertagen ausprobieren...
Wünsch Euch allen ein Frohes Fest!
lg, Bernsch
Bernsch schrieb So ihr
am 23.12.2011 - 17:56 Uhr
So ihr "Streithanseln"... aufhören.. es ist Weihnachten :-)
Wünsch Euch allen ein Frohes Fest!
Von mir auch Frohe Weihnachten für alle, auch für dich Exterior.
Schreibe aber jetzt nichts falsches - ich will ja schließlich Weihnachten nicht an der Decke verbringen. :)
LG
Joe
funktioniert das nun? auch
am 29.01.2012 - 16:55 Uhr
funktioniert das nun? auch mit anderen themes?
Das Prinzip funktioniert in
am 29.01.2012 - 18:12 Uhr
Das Prinzip funktioniert in jedem Theme. Es wird ja nur im entsprechenden node.tpl.php im eigenen Theme nachgesehen, ob in der Teaser-Darstellung die Ausgabe der zum Body gehörenden Felder kleiner als ein Schwellenwert ist. In dem Fall wird der Weiterlesen-Link unterdrückt.
Das Theme ist dabei ziemlich egal. Es muß eben der im Theme liegende Templatefile modifiziert werden.
Beste Grüße
Werner
Vielen Dank :)
am 29.01.2012 - 18:16 Uhr
Vielen Dank :)
Read More Control
am 13.04.2012 - 08:04 Uhr
Hallo Leute,
danke erst mal für den Code.
Mitlerweile gibt es ein ganz nützliches Modul zu diesem Thema: :-)
http://drupal.org/project/readmorecontrol
lg, bernsch
danke für den Modul Hinweis,
am 21.05.2012 - 16:57 Uhr
danke für den Modul Hinweis, funktioniert bestens...
viele Grüße Jenna