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

Textlänge mit drupalicious_summarise begrenzen

Eingetragen von jonas28@drupal.org (96)
am 14.11.2007 - 10:51 Uhr in
  • Module
  • Drupal 5.x

Hallo,
ich benutze das Modul Contemplate (5.x-1.3) um den Teaser eines bestimmten Inhaltstypen zu themen.
Der Teaser soll nur aus den ersten 15 Worten des Feldes Beschreibun bestehen. Dieser Teaser wird dann in einem gmapview in der jeweiligen "Blase" angezeigt.

Ich habe mir dazu das Tutorial "Trim a text field to a certain word length" unter http://drupal.org/node/46391 angesehen. Dort wird die Funktion "drupalicious_summarise" beschrieben, mit der man die Textausgabe von bestimmten Feldern auf eine bestimmte wWortzahl begrenzen kann.

Die Datei template.php habe ich nach Lektüre der Tutorials
trotz der Anmerkung "This has been tested and works with Drupal 4.6.x and Drupal 4.7." um folgendes Codesnippet
erweitert:

function drupalicious_summarise($paragraph, $limit) {

     // STEP 1: trim the text down to the nearest sentence determined by $limit
     // NOTE: This step will only end text if the End Punctuation is met by a blank space, NOT a new or close paragraph tag ("<p>" or "</p>").
   
     $textfield = strtok($paragraph, " ");
     while($textfield) {
   
          $text .= " " . $textfield;
          $words++;
        
          // Check if the limit has been met. ALSO check if the last character in the token word is an End Punctuation.  If not, move on to the next word
          if (($words >= $limit) && ((substr($textfield, -1) == "!")||(substr($textfield, -1) == ".")||(substr($textfield, -1) == ":")||(substr($textfield, -1) == "?"))) {
               break;
          } else {
               $textfield = strtok(" ");
          };
     };
   
     // STEP 2: Once text has been trimmed to the word limit (to the nearest sentence), check for any HTML closing tags (">")
     $textfield = strtok($text, ">");
   
     while($textfield) {
        
          // Only re-add the closing tag if there is a tag to close (text might of been trimmed in first step where closing tag would of been excluded)
          if ((substr($textfield, -1,1) == "!") || (substr($textfield, -1,1) == ".") || (substr($textfield, -1,1) == ":") || (substr($textfield, -1,1) == "?")) {
               $revText .= $textfield;
          } else {
               $revText .= $textfield . ">";
          };
          $tags++;
        
          // Count the number of words when each closing tag is met to ensure the word count isn't under the limit ($limit)
          // Note: Using a different word count method in order not to break the current String position in the "strtok()" method
          $wordCount = explode(" ", $revText);
          $words = count($wordCount);
        
          // If word count is over, check to see if the tag being closed in a paragraph.  If so, return the trim text
          if ($words >=$limit) {
               if (($tags >= 2) && ((substr($textfield, -2,2) == "<p") || (substr($textfield, -3,3) == "</p") )) {
                    $wordCount = ""; // Dump the array to save memory
                    break;
               } else {
                    $textfield = strtok(">");
               };
          } else {
               $textfield = strtok(">");
          };
     };
     return ltrim($revText);
}

Im Contemplatemodul benutze ich wie im Tutorial angegeben für den Teaser folgendes:

<?php print drupalicious_summarise($field_beschreibung[0]['value'],15);?>

Daraufhin funktioniert zwar die Begrenzung der Wortzahl auf 15 innerhalb des Teasers und damit auch innerhalb der gmapblase, aber leider erhalte sobald ich versuche irgendetwas zu speichern, löschen etc. nun ständig einen "whitescreen" und nach den Aktualisieren per Brwoser die folgende Fehlermeldung

Cannot modify header information - headers already sent by (output started at /mounted-storage/home61a/sub006/sc38600-KENG/www/themes/hvv/template.php:1) in /mounted-storage/home61a/sub006/sc38600-KENG/www/includes/common.inc in Zeile 311.

Natürlich habe ich die obenaufgeführten codesnippets wieder entfernt und siehe da alles läuft wieder ohne Probleme, doch ich benötige immer noch eine Lösung um die angezeigten Worte auf eine bestimmte Zahl zu begrenzen.

Gruß Jonas

P.S.
admin/content/node-settings und dort Länge der "gekürzten Beiträge" (Teaser) auf 200 Zeichen einstellen reicht leider nicht...

‹ Themen anlegen / User kommentieren TinyMCE von einzelnen Text Feldern ausschliessen ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Klappt dann wohl doch nicht

Eingetragen von quiptime (4972)
am 14.11.2007 - 11:17 Uhr

Klappt dann wohl doch nicht mit 4.7 und 5.x

Wo genau verwendest Du

<?php
print drupalicious_summarise($field_beschreibung[0]['value'],15);
?>

Hast Du ein separates Template ala node_nodetype.tpl.php erstellt? Wenn nicht, warum?

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

Da geht noch was.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Teste das mal:

Eingetragen von quiptime (4972)
am 14.11.2007 - 11:26 Uhr

Teste das mal: http://drupal.org/node/124621

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

Da geht noch was.

  • Anmelden oder Registrieren um Kommentare zu schreiben

im contemplatemodule

Eingetragen von jonas28@drupal.org (96)
am 14.11.2007 - 11:46 Uhr

Das Snippet:

<?php
print drupalicious_summarise($field_beschreibung[0]['value'],15);
?>

benutze ich im contemplatemodule unter admin/content/templates
Dort kann man zu den jeweiligen inhaltstypen jeweils ein template für teaser, body und rss gestalten.

für die normale anzeige des inhaltstyps verwende ich ein Template ala node_nodetype.tpl.php

Aber der Teaser soll aus oben genannten gründen (anzeige in eine gmapblase) eben anders gethemet werden...
Gibt es eine andere Möglichkeit den Teaser zu themen?

  • Anmelden oder Registrieren um Kommentare zu schreiben

ich test...

Eingetragen von jonas28@drupal.org (96)
am 14.11.2007 - 11:50 Uhr

ich teste das mal, danke!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Testergebnis: Request for increased functionality: drupalicious_

Eingetragen von jonas28@drupal.org (96)
am 14.11.2007 - 11:54 Uhr

Sobald ich

function drupalicious_summarise($paragraph, $limit)
{
$extra = "  [..continued..]";
$textfield = strtok($paragraph, " ");
while($textfield)
      {
           $text .= " $textfield";
           $words++;
           if(($words >= $limit) && ((substr($textfield, -1) == "!")||(substr($textfield, -1) == ".")))
               break;
           $textfield = strtok(" ");
      }
          if (str_word_count($text) >= $limit) $text = $text . $extra;
       return ltrim($text);
    }

in meiner template.php ergänzt habe, kommt wieder der allseits beliebte whitescreen und die Fehlermeldung:

warning: Cannot modify header information - headers already sent by (output started at /mounted-storage/home61a/sub006/sc38600-KENG/www/themes/hvv/template.php:1) in /mounted-storage/home61a/sub006/sc38600-KENG/www/includes/common.inc on line 311.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Doppeltes Templating?

Eingetragen von quiptime (4972)
am 14.11.2007 - 12:05 Uhr
Zitat:

benutze ich im contemplatemodule unter admin/content/templates
Dort kann man zu den jeweiligen inhaltstypen jeweils ein template für teaser, body und rss gestalten.

für die normale anzeige des inhaltstyps verwende ich ein Template ala node_nodetype.tpl.php

Wenn ich das jetzt richtig verstehe "templatest" Du 2 Mal an unterschiedlicher Stelle fuer ein und die selbe Ausgabe?

Einmal mit Contemplate und Andermal mit einer zum Nodetype gehoerenden Template-Datei?

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

Da geht noch was.

  • Anmelden oder Registrieren um Kommentare zu schreiben

template für teaser

Eingetragen von jonas28@drupal.org (96)
am 14.11.2007 - 12:15 Uhr

ich benutze contempale nur und den teaser zu themen, die normale ausgabe überlasse ich der node_nodetype.tpl.php.

Kann man denn inder node_nodetype.tpl.php den Teaser auch themen?

  • Anmelden oder Registrieren um Kommentare zu schreiben

teaser themen mit if ($page == 0):

Eingetragen von jonas28@drupal.org (96)
am 14.11.2007 - 12:20 Uhr

habe gerade unter http://drupal.org/node/93311 gelesen, dass mit in der datei node_nodetype.tpl.php auch den teaser themen kann...

if ($page == 0): //this article node is being displayed as a teaser
...
if ($page == 1): //this article node is being displayed as full node
...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Vermutlich entsteht der

Eingetragen von quiptime (4972)
am 14.11.2007 - 12:31 Uhr

Vermutlich entsteht der Fehler weil Du parallel mit Contemplate und einer Template-Datei themest.

Ja, man kann in der "node_nodetype.tpl.php" den Teaser separat themen.

Da Du einen mit CCK generierten Nodetype ausgibst hier noch ein ergaenzender Tip: http://www.drupalcenter.de/node/6447

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

Da geht noch was.

  • Anmelden oder Registrieren um Kommentare zu schreiben

ich verusuch es jetzt mal ohne contemplate

Eingetragen von jonas28@drupal.org (96)
am 14.11.2007 - 12:37 Uhr

aber gibt es außer drupalicious_summarise noch eine andere möglichkeit, die länge der textausgabe zu definieren?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich denke, die Funktion

Eingetragen von quiptime (4972)
am 14.11.2007 - 13:08 Uhr

Ich denke, die Funktion drupalicious_summarise() ist NICHT das Problem.

Bitte teste mal so in dem Du nur EINE Variante zu themen verwendest. Entweder mit Contemplate oder mit "node_nodetype.tpl.php". Aber NICHT beide Varianten gleichzeitig. Benenne Deine "node_nodetype.tpl.php" mal eben in "node_nodetype_xx.tpl.php" um.

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

Da geht noch was.

  • Anmelden oder Registrieren um Kommentare zu schreiben

ich habe beide varianten ausprobiert...

Eingetragen von jonas28@drupal.org (96)
am 14.11.2007 - 13:36 Uhr

1. nur mit Contemplate
2. nur mit node_nodetype.tpl.php

also beides funktioniert. Ich kann mit beiden Methoden Teaser und Body themen.

NUR: sobald ich die funktion drupalicious_summarise()in meine template.php einbinde taucht der schon oben erwähnte whitescreen auf...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Mhm, ich werde die Funktion

Eingetragen von quiptime (4972)
am 14.11.2007 - 17:42 Uhr

Mhm, ich werde die Funktion nachher mal selber testen. Arbeite auch gerade mit einem Template. Da passt das. Melde mich.

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

Da geht noch was.

  • Anmelden oder Registrieren um Kommentare zu schreiben

danke,

Eingetragen von jonas28@drupal.org (96)
am 21.11.2007 - 09:29 Uhr

würde mich freuen...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • PHP 8.1 - Deprecated function: rtrim()
  • Preloader / Spnner entfernen Menu Link Modal-Modul
  • Schriftgröße standard einstellen
  • Drupal Website gestalten
  • MariaDB 10.6
  • Entity Reference - Title Felder werden als Link angezeigt
  • Tokens werden in Viev als Link angezeigt
  • [bug entdeckt & workaround gefunden] benutzerdefinierte Felder vom Userprofil tauchen ungefragt auch in den Forumtopics auf...
  • [gelöst] Mass contact Empfängerliste nach Taxonomy Term statt Rolle
  • Update V. 9.3.12 auf V. 9.4 mit Fehler: Modul mySQL fehlt. Bitte Hilfe.
  • Sprachpfad, in Drupal Korrekt einstellen, auch bei den Meta-Tags
  • Update von Drupal 9.3 auf 9.4 oder bei 9.3 bleiben
Weiter

Neue Kommentare

  • Danke fürs Feedback. Gut dass
    vor 2 Tagen 3 Stunden
  • Patch angewandt
    vor 2 Tagen 7 Stunden
  • core_version_requirement: ^8
    vor 4 Tagen 8 Stunden
  • core_version_requirement: ^8
    vor 4 Tagen 8 Stunden
  • ok. Wenn ich das mache
    vor 4 Tagen 8 Stunden
  • Bei gleichem Namen hat das
    vor 4 Tagen 9 Stunden
  • Sorry, dass ich mich hier
    vor 4 Tagen 9 Stunden
  • Habe Patch versucht
    vor 4 Tagen 16 Stunden
  • Hier wird ein Patsch
    vor 4 Tagen 18 Stunden
  • Mit Drupal geht das um 150
    vor 5 Tagen 5 Stunden

Statistik

Beiträge im Forum: 247866
Registrierte User: 19592

Neue User:

  • Davidsnins
  • kudes
  • Tkakah

» Alle User anzeigen

User nach Punkten sortiert:
wla9213
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3845
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 2 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