Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 10. Juni 2011 23:52

mike-r
arbeitet mit CMS/ms
Registriert: 21. Dezember 2010
Beiträge: 898
Webseite

[GELÖST] CGBlog (bzw News): output kürzen

Mahlzeit;

ich möchte in CGBlog den Output der Summary auf eine bestimmte Anzahl Worte begrenzen, egal, wieviel in der Summary eingetragen wurde. Die Hilfe gibt dazu leider nichts her, genausowenig wie die Suche in den Foren.

Hat da jemand eine Idee dazu?

Beitrag geändert von mike-r (15. Juni 2011 00:11)


Unablässige Tools für's Webdevelopement/ Fehlerfindung: CSS Validierungsservice, Bildschirmlineal, Firebug, Tidy, Deutsche CSS-Referenz

Offline

#2 10. Juni 2011 04:55

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: [GELÖST] CGBlog (bzw News): output kürzen

Dazu kannst du z.B. das Plugin Truncate_better verwenden. Eingesetzt wird das Plugin wie folgt:

{truncate_better text=$entry->summary truncate='160' add=" . . . "}

Damit begrenzt du das Summary auf 160 Zeichen. Der Vorteil von Truncate Better ist, dass HTML Tags besser berücksichtigt werden und so z.B. Links nicht einfach offen bleiben.

So wie du es hier einsetzen willst, würde ich ganz auf das Summary verzichten und direkt den Content nehmen. Dann musst du nicht zwei Felder ausfüllen.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#3 10. Juni 2011 06:35

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: [GELÖST] CGBlog (bzw News): output kürzen

Oder wenn du die HTML-Tags vorher entfernst, kannst du auch den mit CMSMS mitgelieferten summarize Modifikator verwenden, der direkt auf Wörter ausgerichtet ist wink.

Offline

#4 10. Juni 2011 12:18

mike-r
arbeitet mit CMS/ms
Registriert: 21. Dezember 2010
Beiträge: 898
Webseite

Re: [GELÖST] CGBlog (bzw News): output kürzen

truncate_better is prima, vielen Dank. Auf Zeichen reduzieren ist in meinem Fall eh besser, da Worte ja unterschiedlich lang sein können.

Was den content betrifft, das ist nicht ganz trivial. Wenn ich den Content summarizen würde, dann bekomme ich ein Problem mit Bildern darin. Speziell in meinem Fall habe ich das in der Sidebar, da wären riesige Bilder Mist. Gäbe es eine einfache Lösung für Nurtext? (Nicht allzu wichtig, da ich momentan zwingend eh die summary verwenden muss, aber vlt. braucht's mal wer für die Zukunft....)


Rein interessehalber²; was ist der CMSMS-eigene "summarize Modifikator"?


Unablässige Tools für's Webdevelopement/ Fehlerfindung: CSS Validierungsservice, Bildschirmlineal, Firebug, Tidy, Deutsche CSS-Referenz

Offline

#5 10. Juni 2011 16:01

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: [GELÖST] CGBlog (bzw News): output kürzen

Ähmm, dann schau doch einfach mal in dein /plugin-Verzeichnis big_smile

* Smarty plugin
* ----------------------------------------------------------------
* Type:     modifier
* Name:     summarize
* Purpose:  returns desired amount of words from the full string
*        ideal for article text, etc.
* Auther:   MarkS, AKA Skram, mark@mark-s.net /
*        http://dev.cmsmadesimple.org/users/marks/
* ----------------------------------------------------------------

Offline

#6 17. Juni 2011 00:01

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: [GELÖST] CGBlog (bzw News): output kürzen

Habe daraus mal einen Smarty-Modifikator für CMSms gemacht: http://dl.dropbox.com/u/2876578/CMSms/M … better.php
Einfach nach /plugins kopieren und analog zu truncate anwenden:

{$entry->summary|truncate_better:'160':' . .  .   '}

Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#7 17. Juni 2011 00:56

mike-r
arbeitet mit CMS/ms
Registriert: 21. Dezember 2010
Beiträge: 898
Webseite

Re: [GELÖST] CGBlog (bzw News): output kürzen

NaN: Bezieht sich der Modifikator auf meinen Einwand bzgl. per TinyMce/Content eingebundener Grafiken, oder wie muss ich mir das vorstellen?
Welchen Vorteil habe ich vom "Smarty-Modifikator"?


Unablässige Tools für's Webdevelopement/ Fehlerfindung: CSS Validierungsservice, Bildschirmlineal, Firebug, Tidy, Deutsche CSS-Referenz

Offline

#8 17. Juni 2011 01:15

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: [GELÖST] CGBlog (bzw News): output kürzen

Nö, hat damit nix zu tun.
Der Modifikator ist zum einen um ein paar kleine Fehler reduziert worden und zum anderen ist er wie ein Plugin performanter als ein UDT.
Das ist schon alles.

Brauchte das Ding auch gerade und hatte keine Lust auf einen UDT. Und dabei sind mir ein paar Kleinigkeiten aufgefallen, die ich gleich behoben habe.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#9 17. Juni 2011 01:31

mike-r
arbeitet mit CMS/ms
Registriert: 21. Dezember 2010
Beiträge: 898
Webseite

Re: [GELÖST] CGBlog (bzw News): output kürzen

Danke, konkrete Unterschiede hast Du da nicht?
Kuck mir das morgen mal an. Aber wüsste schon gern, welche Unterschiede konkret zu erwarten sind.


Unablässige Tools für's Webdevelopement/ Fehlerfindung: CSS Validierungsservice, Bildschirmlineal, Firebug, Tidy, Deutsche CSS-Referenz

Offline

#10 17. Juni 2011 01:50

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: [GELÖST] CGBlog (bzw News): output kürzen

Hab den Code eigentlich fast 1:1 kopiert und nur für einen Modifikator umgeschrieben.
Lediglich sowas wie if($aTag = 'p' || 'div') hab ich korrigiert. (falscher syntax. richtig ist if($aTag == 'p' || $aTag == 'div'). Aber die Funktionsweis ist ansonsten identisch. Ist vielleicht auch einfach nur Gewöhnungsache. Der eine schreibt lieber {truncate_better ... } der andere liebe {...|truncate_better}.
Ich wollte nur kein UDT haben. Hätte auch ein normales Plugin draus machen können. Aber da truncate keins ist, dachte ich mir, mache ich aus truncate_better eben auch keins. Die Sache mit den Bildern ist damit nicht zu lösen. Das müsstest Du evtl. mit regex_replace machen.

Bsp.:

{$entry->content|truncate_better:'80'|regex_replace:'/<img [^>]*\/?>/':''}

oder umgekehrt

{$entry->content|regex_replace:'/<img [^>]*\/?>/':''|truncate_better:'80'}

dann werden Bilder aus dem Summary komplett entfernt.
Oder Du verwendest relative Breitenangaben fü die Bilder:

Dann werden sie im Browser so skaliert, dass sie auch in die Sidebar passen.
Ist aber vielleicht auch nicht so schön.

Wenn Du wirklich nur reinen Text haben willst, dann hilft Dir vielleicht der strip_tags Modifikator. Dann kannst Du auch einfach nur truncate verwenden, um die Ausgabe zu begrenzen, weil ja dann keine HTML Tags mehr da sind, die durcheinandergeraten können.

Bsp.:

{$entry->content|strip_tags:false|truncate:160}

Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#11 17. Juni 2011 08:53

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: [GELÖST] CGBlog (bzw News): output kürzen

wenn ich mich recht erinnere, gibt es aber Probleme mit <br/> und <hr/> richtig? die werden einfach "beschnitten".

Offline

#12 17. Juni 2011 10:59

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: [GELÖST] CGBlog (bzw News): output kürzen

Stimmt. Da war nochwas.
Was ich interessant finde, ist, dass der Code keinerlei reguläre Ausdrücke verwendet, sondern nur einfache string-Funktionen. Allerdings muss er dazu in einer For-Schleife jedes einzelne Zeichen durchgehen und überprüfen. Damit wäre der Geschwindigkeits-Vorteil gegenüber regulären Ausdrücken möglicherweise wieder hinfällig.
Mal schaun, was man da noch drehen kann.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#13 17. Juni 2011 12:28

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: [GELÖST] CGBlog (bzw News): output kürzen

Also ich hab da mit dem modifier keine Fehler feststellen können.
Vielleicht lag es ja an den kleinen Problemen, die ich da rausgenommen habe.
Folgender Demotext:

<p>The <br />news</p>
<hr />
<p>module <br />was <br />installed.</p>
<hr />
<p>Exciting.</p>
<p>This news article is not using the Summary field and therefore there is no link to read more.</p>
<hr />
<p>But you can click on the news heading to read only this article.</p>
<p>Some Text here</p>

Und dann z.B. mit {$entry->content|truncate_better:'19'} gekürzt.
Ergebnis:

<p>The <br />news</p>
<hr />
<p>module...</p>


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#14 17. Juni 2011 12:41

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: [GELÖST] CGBlog (bzw News): output kürzen

fein!

Offline

#15 07. November 2012 13:31

ben04
hat von CMS/ms gehört
Registriert: 07. November 2012
Beiträge: 7

Re: [GELÖST] CGBlog (bzw News): output kürzen

Ich weiß der Thread ist schon etwas älter, aber ich bräuchte etwas Hilfe:

Ich hab das truncate-better.php in den /plugin Order geschoben, und wollte es jetzt über das {truncate_better} Tag einbinden, allerdings kennt CMSMS das Tag nicht. Muss ich noch irgendwas machen außer die .php in den /Plugin-Ordner zu schieben, damit das Tag erkannt wird?

Offline

#16 07. November 2012 13:41

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: [GELÖST] CGBlog (bzw News): output kürzen

Du musst den Funktionsnamen ändern:

bisher smarty_cms_function_truncate_better

neu smarty_function_truncate_better


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#17 08. November 2012 15:28

ben04
hat von CMS/ms gehört
Registriert: 07. November 2012
Beiträge: 7

Re: [GELÖST] CGBlog (bzw News): output kürzen

Wo steht denn diese Funktion?

Offline

#18 08. November 2012 15:32

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: [GELÖST] CGBlog (bzw News): output kürzen

in der Datei function.truncate_better.php


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#19 08. November 2012 22:32

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: [GELÖST] CGBlog (bzw News): output kürzen

NaN schrieb:

Habe daraus mal einen Smarty-Modifikator für CMSms gemacht: http://dl.dropbox.com/u/2876578/CMSms/M … better.php

Bekomme hier nur 'ne 404er Meldung ... ist das so gewollt?

Offline

#20 09. November 2012 09:39

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: [GELÖST] CGBlog (bzw News): output kürzen

Link hat sich geändert. Ist jetzt hier zu finden.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#21 10. November 2012 19:23

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: [GELÖST] CGBlog (bzw News): output kürzen

Thx!

Offline

#22 10. November 2012 20:59

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: [GELÖST] CGBlog (bzw News): output kürzen

Hier eine weiter modifizierte Version:

- Falls ein Link bereits mit <a href maskiert ist, werden die Link-Tags entfernt
- Falls keine Tags im String sind, wurde bis anhin beim kürzen kein $addString oder $link ausgewiesen.

<?php


/**
* Smarty plugin
* http://www.smarty.net/forums/viewtopic.php?t=533
-----------------------------------------------------
* File: modifier.truncate_better.php
* Type: modifier
* Name: truncate_better
* Version: 1.3
* Date: January 13th, 2010
* Modified: November 10th, 2012
* Purpose: Cut a string preserving any tag nesting and matching.
* Install: Drop into the plugin directory.
* Author: Original Javascript Code: Benjamin Lupu <lupufr@aol.com>
* Translation to PHP & Smarty: Edward Dale <scompt@scompt.com>
* Modification to add a string: Sebastian Kuhlmann <sebastiankuhlmann@web.de>
* Modification to add user defined closing text before closing tag if tag matches specified elements and added read more link with variable text:
* Avi J Liebowitz avij.com
* Clean up by Brice Favre <brice.favre@blogspirit.com>
* Add Check for naked URL by Lukas Blatter <lukas.blatter@blattertech.ch>
* Add $addstring and $link if there's no tags in string by Lukas Blatter <lukas.blatter@blattertech.ch>
* Add to ToolBox by Lukas Blatter <lukas.blatter@blattertech.ch>
* Example Usage {$htmlString|html_substr:<lengh>:<string_to_add>:<link>:<link_text>}
* 
* @param string
* @param integer
* @param string
* @param string
* @param string
* @return string
*
-------------------------------------------------------------
*/

function smarty_modifier_truncate_better($string, $length = 80, $addstring = '...', $link = '', $link_text = '') {
    // only execute if text is longer than desired length
    if (strlen($string) > $length) {
        if( !empty( $string ) && $length > 0 ) {
        	
        	if ($link != '') {
				// check for naked url
				$regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>"; 
				if(preg_match_all("/$regexp/siU", $link, $matches)) 
					$link = $matches[2][0];
			} 
        	
            $isText = true;
            $ret = "";
            $i = 0;

            $lastSpacePosition = -1;

            $tagsArray = array();
            $currentTag = "";

            $noTagLength = strlen(strip_tags($string));

            // Parser loop
            $string_length = strlen($string);
            for($j = 0 ; $j < $string_length ; $j++) {

                $currentChar = substr( $string, $j, 1 );
                $ret .= $currentChar;

                // Lesser than event
                if( $currentChar == "<") $isText = false;

                // Character handler
                if( $isText ) {

                    // Memorize last space position
                    if( $currentChar == " " ) {
                        $lastSpacePosition = $j;
                    }
                    else {
                        $lastChar = $currentChar;
                    }

                    $i++;
                } else {
                    $currentTag .= $currentChar;
                }

                // Greater than event
                if( $currentChar == ">" ) {
                    $isText = true;

                    // Opening tag handler
                    if( ( strpos( $currentTag, "<" ) !== false) &&
                            ( strpos( $currentTag, "/>" ) === false) &&
                            ( strpos( $currentTag, "</") === false) ) {

                        // Tag has attribute(s)
                        if( strpos( $currentTag, " " ) !== false ) {
                            $currentTag = substr( $currentTag, 1, strpos( $currentTag, " " ) - 1 );
                        } else {
                            // Tag doesn't have attribute(s)
                            $currentTag = substr( $currentTag, 1, -1 );
                        }

                        array_push( $tagsArray, $currentTag );

                    } else if( strpos( $currentTag, "</" ) !== false ) {
                        array_pop( $tagsArray );
                    }

                    $currentTag = "";
                }

                if( $i >= $length) {
                    break;
                }
            }

            // Cut HTML string at last space position
            if( $length < $noTagLength ) {
                if( $lastSpacePosition != -1 ) {
                    $ret = substr( $string, 0, $lastSpacePosition );
                } else {
                    $ret = substr( $string, $j );
                }
            }

			// when there's no tags         
			if (count( $tagsArray ) == 0) {
				$ret .= $addstring;
				if (strlen($link))
					$ret .= " <a href=\"". $link . "\" title=\"". ($link_text != '' ? $link_text : $link) . "\">" . ($link_text != '' ? $link_text : $link) . "</a>";
			}
			// there are tags
			else {
	            // Close broken XHTML elements   
	            while( count( $tagsArray ) != 0 ) {
	                if ( count( $tagsArray ) > 1 ) {
	                    $aTag = array_pop( $tagsArray );
	                    $ret .= "</" . $aTag . ">\n";
	                }
	                // You may add more tags here to put the link and added text before the closing tag
	                elseif ($aTag = 'p' || 'div') {
	                    $aTag = array_pop( $tagsArray );
	                    $ret .= $addstring;
	                    if (strlen($link))
	                    	$ret .= " <a href=\"". $link . "\" title=\"". ($link_text != '' ? $link_text : $link) . "\">" . ($link_text != '' ? $link_text : $link) . "</a></" . $aTag . ">\n";
	                }
	                else {
	                    $aTag = array_pop( $tagsArray );
	                    $ret .= "</" . $aTag . ">" . $addstring;
	                    if (strlen($link))
	                    	$ret .= " <a href=\"". $link . "\" title=\"". ($link_text != '' ? $link_text : $link) . "\">" . ($link_text != '' ? $link_text : $link) . "</a>\n";
	                }
	            }
			}
        } 
        else {
            $ret = "";
        }

        return $ret;
    }
    else {
        return $string;
    }
} 

Der Modifier wird in der nächsten ToolBox Version als tbTruncateBetter eingebunden sein.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline