Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#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 .
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
* 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:
<img ... width="100%" />
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".
Meine Projekte:
Dashcam-Test | Babyphone-Testberichte | Türspionkameras
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!
Meine Projekte:
Dashcam-Test | Babyphone-Testberichte | Türspionkameras
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
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
Seiten: 1