|
Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon. |
|
View previous topic :: View next topic |
Author |
Message |
McSodbrenner Smarty Pro
Joined: 19 Sep 2004 Posts: 101 Location: Hamburg, Germany
|
Posted: Sun Sep 19, 2004 8:38 am Post subject: ImproveTypo-Plugin |
|
|
Dieses Plugin verbessert die Typografie nach deutscher Rechtschreibung. Ist also für die Leute, die nicht nur gern eine funktionierende Seite haben wollen, sondern auch eine typografisch korrekte. Für Vorschläge bin ich immer offen!
Das Plugin kann zur Zeit folgendes:
- Zollzeichen werden zu Anführungszeichen umgewandelt
- Falsch gesetzte Bindestriche werden zu Gedankenstrichen
- Falsche drei Punkte werden zum Ellipsenzeichen (Auslassungszeichen)
- Ein falsches Zeichen als Apostroph wird durch das richtige ersetzt
- EURO wird durch das Euro-Zeichen ersetzt
- Der falsche Bindestrich bei Preisangaben wird durch den langen Gedankenstrich ersetzt
- Eine falsche Schreibweise des Wortes "E-Mail" wird korrigiert
- Die falsche Benutzung des ß in Versalien (Großbuchstaben) wird korrigiert
Das Ding wird folgendermaßen verwendet
Code: | {improvetypo}
Text
{/improvetypo}
|
Setzt man diff auf 1, wird einem angezeigt, was korrigiert wurde.
[php:1:59697bbd3b]<?php
/*
* Smarty plugin
* -------------------------------------------------------------
* File: block.improvetypo.php
* Type: block
* Name: improvetypo
* Purpose: improve typo for better site appearance
* Comments will not be edited, so use them to prevent javascript- and css-sections
*
* Author: Christoph Erdmann <mail@cerdmann.com>
* Version: 09.09.2004
* Internet: http://www.cerdmann.com
* -------------------------------------------------------------
*/
function smarty_block_improvetypo($params, $content, &$smarty)
{
// Options
$diff = 0;
if (is_null($content)) {
return;
}
// set time (microtime(1) only works with PHP 5)
$time['start'] = microtime(1);
$source = $content;
// If not exists, a function called "show_diff" is created to show the replacements in Source
if (!function_exists(show_diff))
{
function show_diff ($string,$use)
{
if ($use)
{
return '<span style="background-color: yellow">'.$string.'</span>';
}
else
{
return $string;
}
}
}
// Replace "string" with &string&
$what = '"';
$then = '"$2"=="$1"? stripslashes("$1"): show_diff("{QUOTE}",$diff)';
$source = preg_replace("/((<[^>]*)|$what)/ieS", $then, $source);
// Now replace ...
$source = preg_replace('/\{QUOTE\}(.*?)\{QUOTE\}/sS', "&$1&", $source);
// Re-replace lonely {QUOTE}s
$source = str_replace('{QUOTE}', "\"", $source);
// Replace - with &
$what = ' - ';
$then = '"$2"=="$1"? stripslashes("$1"): show_diff(" & ",$diff)';
$source = preg_replace("/((<[^>]*)|$what)/eS", $then, $source);
// Replace ... with &
$what = '\.{2,}';
$then = '"$2"=="$1"? stripslashes("$1"): show_diff(" & ",$diff)';
$source = preg_replace("/((<[^>]*)|$what)/eS", $then, $source);
// Correct incorrect use of apostroph
$what = '([a-z])(\'|´)s ';
$then = '"$2"=="$1"? stripslashes("$1"): show_diff("$3s ",$diff)';
$source = preg_replace("/((<[^>]*)|$what)/ieS", $then, $source);
// Replace the other correct apostrophes with the correct symbol
$what = '\'|´';
$then = '"$2"=="$1"? stripslashes("$1"): show_diff("&",$diff)';
$source = preg_replace("/((<[^>]*)|$what)/eS", $then, $source);
// Replace EUR/O with &
$what = 'EURO([^A-Z])';
$then = '"$2"=="$1"? stripslashes("$1"): show_diff("&$3",$diff)';
$source = preg_replace("/((<[^>]*)|$what)/eS", $then, $source);
// Replace false extension of prices
$what = '([0-9]),-';
$then = '"$2"=="$1"? stripslashes("$1"): show_diff("$3,&",$diff)';
$source = preg_replace("/((<[^>]*)|$what)/eS", $then, $source);
// Replace Telefon: or Tel: with Tel.:
/*$what = 'Telefon:|[^a-z]Tel:';
$then = '"$2"=="$1"? stripslashes("$1"): show_diff("Tel.:",$diff)';
$source = preg_replace("/((<[^>]*)|$what)/ieS", $then, $source);*/
// Replace false E-Mail-Writing
$what = 'e-?[mM]ail([^a-zA-Z])';
$then = '"$2"=="$1"? stripslashes("$1"): show_diff("E-Mail$3",$diff)';
$source = preg_replace("/((<[^>]*)|$what)/eS", $then, $source);
// Replace false use of ß in majuscules
$what = '([A-Z])ß([A-Z])';
$then = '"$2"=="$1"? stripslashes("$1"): show_diff("$3SS$4",$diff)';
$source = preg_replace("/((<[^>]*)|$what)/eS", $then, $source);
$time['end'] = microtime(1);
$time = round($time['end'] - $time['start'],2);
if (isset($params['escape']) && $params['escape'] == true)
{
$source = str_replace('<','&',$source);
$source = str_replace('>','&',$source);
}
if (isset($params['nl2br']) && $params['nl2br'] == true)
{
$source = preg_replace("(\r\n|\r|\n)","<br />",$source);
}
return "\n<!-- start typo-improving -->\n".$source."\n<!-- improved typo in $time sec -->\n";
}
?>
[/php:1:59697bbd3b] |
|
Back to top |
|
McSodbrenner Smarty Pro
Joined: 19 Sep 2004 Posts: 101 Location: Hamburg, Germany
|
Posted: Sun Sep 19, 2004 5:15 pm Post subject: |
|
|
Hab gerade gesehen, dass die Codierung mit [php] nicht darauf achtet, dass Entities kodiert werden. Die Anzeige des Codes oben ist also nicht ganz richtig.
Also, falls jemand das Script haben möchte, einfach Bescheid sagen. |
|
Back to top |
|
kills Smarty Elite
Joined: 28 May 2004 Posts: 493
|
Posted: Mon Sep 20, 2004 6:42 am Post subject: |
|
|
ich denke es wäre sinnvoller deine block function als Modifier anzulegen, anstatt der block function.
man könnte dann beim einfügen in die db einfach mit |correctTypo o.ä. die rechtschreibung checken
könntest du auch die korrigierte version des Plugins nochmal posten?
Danke und Gruß,
kills |
|
Back to top |
|
McSodbrenner Smarty Pro
Joined: 19 Sep 2004 Posts: 101 Location: Hamburg, Germany
|
Posted: Mon Sep 20, 2004 11:53 am Post subject: |
|
|
Hi,
ursprünglich war es auch ein Modifier. Aber ich hatte Gründe, das zu ändern.
1) Meine Kollegen achten nicht so auf die Rechtschreibung in den Templates. Somit konnte ich durch simples Setzen der Blockfunktion alles wieder heile machen.
2) Manchmal bin ich auch zu faul, in den Templates auf saubere Rechtschreibung zu achten.
3) Braucht man es wirklich nur als Modifier, kann man ja einfach den Block herumsetzen.
Weißt du zufällig, wie man es hinbekommt, dass Entities nicht gekillt werden?
Grüzi,
Christoph |
|
Back to top |
|
kills Smarty Elite
Joined: 28 May 2004 Posts: 493
|
Posted: Mon Sep 20, 2004 12:09 pm Post subject: |
|
|
Was meinst du damit, dass du die Templates unsauber schreibst?
Baust du diesen Block um das Komplette Teamplate aussen herum oder nur um die Eingaben der user?
Was verstehst du unter Entities? |
|
Back to top |
|
McSodbrenner Smarty Pro
Joined: 19 Sep 2004 Posts: 101 Location: Hamburg, Germany
|
Posted: Mon Sep 20, 2004 3:16 pm Post subject: |
|
|
kills wrote: | Was meinst du damit, dass du die Templates unsauber schreibst? |
Na, dass ich nicht immer auf die korrekte Rechtschreibung achte, z.B. mal - statt & verwende oder "Test" statt &Test&
kills wrote: | Baust du diesen Block um das Komplette Teamplate aussen herum oder nur um die Eingaben der user? |
Ich bau das Ding meistens um den Bereich herum, der den Content enthält. Der Rest ändert sich ja so gut wie nie.
kills wrote: | Was verstehst du unter Entities? |
Na, die lustigen Sonderzeichen, die mit einem & maskiert werden... die werden irgendwie verschluckt...
hat er in diesem Post übrigens wieder gemacht!
Aber jetzt weißt du ja, dass es mir z.B. um die Maskierung von typografischen Zeichen geht. _________________ Grüzi,
Christoph
My sweet home: www.webboarder.de
Do not visit!! It is private!! And it's mine! |
|
Back to top |
|
messju Administrator
Joined: 16 Apr 2003 Posts: 3336 Location: Oldenburg, Germany
|
Posted: Mon Sep 20, 2004 4:10 pm Post subject: |
|
|
das plugin finde ich sehr interessant. schade das dieses phpbb zu doof ist mit den entities umzugehen. wenn du magst, paste das plugin ins smarty wiki: http://smarty.incutio.com/?page=SmartyPlugins das sollte das abkönnen.
ob nun ein modifier oder ein block besser ist ist wohl geschmacksache. ich würde die eigentliche formatierfunktion als shared-funktion kapseln. dann kann ein block-plugin diese shared-function laden und benutzen und ebenso kann ein modifier sie laden und benutzen. ausserdem kann man die funktion dann evtl. von php direkt aus ansprechen.
in der smarty-distribution gibt es ein beispiel: libs/plugins/shared.escape_special_chars.php diese function wird von verschiedenen anderen plugins (html_image, html_option u. a.) verwendet.
ebenso könnte man mit einer shared.improvetypo.php verfahren und sie mit block.improvetypo.php aber auch anderem verwenden.
ist nur eine idee
gruß
messju |
|
Back to top |
|
McSodbrenner Smarty Pro
Joined: 19 Sep 2004 Posts: 101 Location: Hamburg, Germany
|
Posted: Tue Sep 21, 2004 7:23 am Post subject: |
|
|
Jetzt hab ich die Lösung!
Eine Sache hatte ich nämlich verschwiegen: Die Funktion kann durch die ganzen RegEx verdammt lange brauchen (bei großen Texten auch mal im Sekunden-Bereich).
Deshalb jetzt meine Idee:
Die Funktion einmal als pre-Filter anlegen (post-Filter wäre mehr zu parsen), dann hat man schon gesäuberte PHP-Dateien, die halt nur bei geänderten Templates neu erstellt werden. Wäre gut für die Performance.
Für Variablen von außen könnte man das Ding ja zusätzlich noch als Modifikator anlegen.
Deine Idee als shared-Funktion kann man natürlich trotzdem nutzen...
Was haltet ihr von dieser Idee?
Mir gehts zur Zeit ziemlich um die Performance, arbeite gerade an einer bald stark frequentierten Seite.
Ins Wiki hab ich die Datei bisher nicht gestellt, weil die halt für Nicht-Deutsche völlig unbrauchbar ist und somit für die meisten überflüssig ist.
Wo wir gerade dabei sind... wo ist eigentlich der Flaschenhals bei Smarty, was kostet am meisten Performance?
Macht es Sinn, aufgrund der Performance Templates und Kompilate in eine DB zu stecken? _________________ Grüzi,
Christoph
My sweet home: www.webboarder.de
Do not visit!! It is private!! And it's mine! |
|
Back to top |
|
messju Administrator
Joined: 16 Apr 2003 Posts: 3336 Location: Oldenburg, Germany
|
Posted: Tue Sep 21, 2004 9:14 am Post subject: |
|
|
McSodbrenner wrote: | Was haltet ihr von dieser Idee?
Mir gehts zur Zeit ziemlich um die Performance, arbeite gerade an einer bald stark frequentierten Seite.
|
ich finde die idee sehr gut.
Quote: | Wo wir gerade dabei sind... wo ist eigentlich der Flaschenhals bei Smarty, was kostet am meisten Performance? |
das kann man so pauschal nicht sagen. für viele ist der größte flaschenhals schon das laden+parsen von Smarty.class.php . das kann man aber gut mit apc oder turck-mmcache kompensieren.
Quote: | Macht es Sinn, aufgrund der Performance Templates und Kompilate in eine DB zu stecken? |
nicht wirklich.
die templates werden ja nur einmal zum kompilieren gelesen, und dann nie wieder. es sollte also nichts ausmachen, wenn die templates auf einem langsamen medium liegen.
die kompilate sollten auf keinen fall in einer DB stecken, da include() und caches wie apc oder turck-mmcache damit nicht funtionieren.
ob gecachete seiten besser im filesystem oder in der datenbank aufgehoben sind, hängt von der jeweiligen situation ab. |
|
Back to top |
|
McSodbrenner Smarty Pro
Joined: 19 Sep 2004 Posts: 101 Location: Hamburg, Germany
|
Posted: Fri Sep 24, 2004 7:51 am Post subject: |
|
|
So, die Kombination aus prefilter und modifier steht jetzt im Wiki. Einfach ausprobieren, $diff in den Options auf 1 stellen und wundern, was man so alles falsch schreibt.
Für Erweiterungsvorschläge bin ich immer dankbar. _________________ Grüzi,
Christoph
My sweet home: www.webboarder.de
Do not visit!! It is private!! And it's mine! |
|
Back to top |
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|
|