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 - 09: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 - 10: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 - 10: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 - 10: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 - 10: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 - 10: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 - 11: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 - 11: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 - 11: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 - 11: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 - 11: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 - 12: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 - 12: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 - 16: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 - 08:29 Uhr

würde mich freuen...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • eMail-Adresse überprüfen ob diese auch tatsächlich existiert
  • Versenden von Anfragen per Webform
  • D 7.78 und eine sqlite Datenbank statt mySQL
  • [gelöst]Welche Tokens werden bei Images im Feld Dateiverzeichnis erlaubt
  • Modulupdate per Webinterace scheitert an authorize.php und access denied für Admin-User
  • Fehlermeldung nach Update auf PHP 7.4 - array offset on value of type null in geocoder_widget...
  • BEF Exposed Filter collapse funktioniert nicht mit Bootstrap Theme
  • content und media-files von drupal8 nach drupal9 migrieren
  • Notificationsnicht immer und gesammelt bei Update
  • Meldung zu Token im Statusbericht
  • Fehlermeldung: Deprecated function
  • Warning: call_user_func() expects parameter 1 to be a valid callback, class 'Drupal\node\Entity\Node' does not have a method 'ge
Weiter

Neue Kommentare

  • Danke für diese doch sehr
    vor 5 Stunden 44 Minuten
  • zu 1. Ja, ist er auch ;) zu
    vor 7 Stunden 48 Minuten
  • bei den meisten Hostern
    vor 21 Stunden 40 Minuten
  • wirklich sicherstellen kann man es nur,
    vor 21 Stunden 44 Minuten
  • Moin Moin vielen lieben Dank
    vor 1 Tag 3 Stunden
  • Auch,wenn es noch über
    vor 1 Tag 8 Stunden
  • Das steht über dem Bereich,
    vor 1 Tag 8 Stunden
  • Hallo Jenna, ich habe das
    vor 2 Tagen 4 Stunden
  • Ich hatte gehofft, bis auf
    vor 2 Tagen 4 Stunden
  • Wenn der Provider keine freie
    vor 2 Tagen 5 Stunden

Statistik

Beiträge im Forum: 245993
Registrierte User: 18832

Neue User:

  • finnster
  • Damian1802
  • MrWebMV

» Alle User anzeigen

User nach Punkten sortiert:
wla9012
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3916
ronald3831
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 2 User und 12 Gäste online.

Benutzer online

  • scaexp
  • ronald

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