Per il tema mobile, ho realizzato questa funzione al fine di troncare la lunghezza del teaser mostrato nel primo nodo della pagina.
Si tratta di una funzione banalissima.
<?php
function truncate_text($text, $max_char = 10) {
$maxlen = $max_char;
if ($max_char <= 10) {
$text_cutted = drupal_substr($text, 0, $maxlen);
$last_space = strripos($text_cutted, " ");
if ( !$last_space ) {
$text = $text_cutted;
} else {
$text = drupal_substr($text_cutted, 0, $last_space) . "...";
}
} else {
if (drupal_strlen($text) > $max_char) {
while ( !$last_p ) {
$text_cutted = drupal_substr($text, 0, $maxlen);
$last_p = strripos($text_cutted, "</p>");
$maxlen = $maxlen + 100;
}
$text = drupal_substr($text_cutted, 0, $last_p) . " ...</p>";
}
}
return $text;
}
?>
Mi piacerebbe però renderla più robusta.
e vorrei capire come fare a rimuovere, all'interno del teaser originario eventuale testo racchiuso dentro i tag .
Mi aiutate a migliorare questa funzione con le specifiche che ho indicato ed un migliore check dei possibili errori di esecuzione?
Mi aiuta qualcuno?
http://www.sanisapori.eu
non ho capito se devi strippare le tags.
tipo:
<span>testo</span>
diventa solotesto
.se è così prova ad utilizzare la funzione php strip_tags
Certified to Rock
No.
Io devo tagliare il teaser dopo un certo numero di caratteri.
Per fare questo è necessario, come fa drupal stesso (se mi dite come fa, non sarebbe male), tagliare il content sempre alla fine di ogni paragrafo e/o div.
Quindi questa è la prima necessità. E la funzioni che vedi su cerca di fare proprio questo. Però succede che a volte lascia delle tracce di tag.
L'altra cosa che volevo fare è all'interno del $content rimuovere tutto tutto cioè che è racchiuso all'interno dei tag .
Poi, io applico la funzione all'interno di node.tpl.php ...questo vuol dire che mi vengono tagliati anche eventuali blocchi aggiunti in coda a $content e derivati dall'applicazione di alcuni moduli. Quindi, forse, andrebbe applicata altrove.
Mi capitata anche un caso (isolato) in cui quando ha analizzato il testo, praticamente lo script è andato in timeout xkè ha superato i 30s. Per risolvere l'errore per quel caso isolato.. ho solo aumentato il numero di paragrafi () nell'intero testo da tagliare.
Tra l'altro, ho notato che l'insieme di queste 3 righe
$text_cutted = drupal_substr($text, 0, $maxlen);
$last_p = strripos($text_cutted, "</p>");
$text = drupal_substr($text_cutted, 0, $last_p) . " ...</p>";
non fa sempre quello che mi aspetto che faccia e questo mi confonde non poco le idee in merito.
Mi serve aiuto per migliorare questa funzione
http://www.sanisapori.eu
E va bene. Se dai un occhiata a node_teaser scopri che non è proprio una banalità troncare il testo di un nodo.
Ma pò darsi che lo consideri troppo complesso. Fatto sta che qualche volta un problema superficialmente semplice, è davvero complesso. Tagliare una stringa dopo un tot di carattere è semplice. Ma se aggiungi l'encoding utf8 diventa più complesso. E se sopra questo aggiungi anche markup HTML, allora buona fortuna.
Per altro codice che tronca il testo vedi il progetto Read More Link. Intendo vedi il codice del progetto - è open source dopo tutto.
Ma se come l'essere umano è (ancora) più intelligente del codice, mettere un
<!--break-->
è sempre il modo più affidabile. Potresti sempre inventare uno proprio per il mobile<!--mbreak-->
per esempio...Più imparo, più dubito.
Prima di analizzare tutte le cose che mi hai scritto...
ti dico subito una cosa... io ho tentato di capire come fare a far inserire in automatico un drupal break
<!--break-->
.Il problema è che deve essere inserito in automatico durante la creazione del nodo partendo da un feed per esempio. Questo xkè se il nodo lo crei da te... non importa più xkè il break lo inserisci a mano dove preferisci.
http://www.sanisapori.eu
Mi sa apparentemente che questa funzione così fatta e tutt il lavoro da fare in + per migliorarla NON servono +.
Hanno pensato bene di risolvere il problema quelli di DevelopmentSeed.org
Hanno fatto una gran cosa.
http://www.sanisapori.eu
ovvero?
Certified to Rock
Vai a guardate le Note della nuovissima Release del modulo Feeds, la alpha15.
Testala.. e vedi che ti crea i teaser dei nodi e apparentemente li crea usando lo stesso sistema utilizzato drupal stesso, tanto che è soggetto alla stessa configurazione.
http://www.sanisapori.eu
Drupal ha la funzione truncate_utf8() per troncare il contenuto di una stringa; per creare il teaser di un nodo, la funzione è node_teaser(), come già riportato da jhl.verona.
Kiam
Kiam la luno renkontas la sunon.