Drupal e la sua Funzione per tagliare le la stringa dell'user name

4 contenuti / 0 new
Ultimo contenuto
Drupal e la sua Funzione per tagliare le la stringa dell'user name

Ho scoperto che Drupal, con una qualche sua specifica funzione taglia la stringa che caratterizza l'user name degli utenti, ad un dato numero massimo di caratteri seguiti da puntini.

esempio:

Quote:
user: roberto drupal name
user truncate: roberto ...

io per fare questa cosa, all'interno della nuova funzione di login form da poco creata, ho insrito una mia funzione specifica per troncare le stringe. Niente di particolare, ma molto utile.

Volevo sapere qual è questa funzione di drupal in modo da poterla utilizzare direttamente, rimuovendo quella da me creata?

[ se le cose già esistono, inutile inserire altro codice superfluo ]

includes/theme.inc:1662

    if (drupal_strlen($object->name) > 20) {
      $name = drupal_substr($object->name, 0, 15) .'...';
    }
    else {
      $name = $object->name;
    }

Più imparo, più dubito.

jhl.verona wrote:
includes/theme.inc:1662
    if (drupal_strlen($object->name) > 20) {
      $name = drupal_substr($object->name, 0, 15) .'...';
    }
    else {
      $name = $object->name;
    }

Certo che la funzione drupal_substr è alquanto complessa!!... un casino di righe di codice.

Io avevo fatto una funzione di questo tipo, semplice ed efficace e che tra l'altro controlla anche gli spazi... quando ci sono.

<?php
// Truncate String
function truncate_string($text, $max_char = 5) {
    if (
strlen($text) > $max_char) {
       
$text_cutted = substr($text, 0, $max_char);
       
$last_space = strrpos($text_cutted, " ");
        if (
$last_space > 3) {
           
$newtext = substr($text_cutted, 0, $last_space);
        } else {
           
$newtext = $text_cutted;
        }
       
$text = $newtext . '...';
    }
    return
$text;
}
?>

Continuo a resistere a tutto forchè le tentazioni...

jscm wrote:
Certo che la funzione drupal_substr è alquanto complessa!!... un casino di righe di codice.

Non proprio, sta solo tenendo conto che l'ambiente PHP può essere multibyte, oppure UTF8 encoded. Nel secondo caso (dalla else { in poi) sta tenendo conto che certi caratteri sono composto di 2, 3, o 4 byte, insieme al fatto che i parametri $start e $length possono essere negativo (cioè leggendo indietro dalla fine dello stringha).
Questo 'casino di righe' risultano in una funzione molto flessibile, ed identico al PHP substr() che doveva sostituire - per motivi spiegati qui http://www.php.net/manual/en/function.substr.php#93884.

jscm wrote:
Io avevo fatto una funzione di questo tipo, semplice ed efficace e che tra l'altro controlla anche gli spazi... quando ci sono.
<?php
// Truncate String
function truncate_string($text, $max_char = 5) {
    if (
strlen($text) > $max_char) {
       
$text_cutted = substr($text, 0, $max_char);
       
$last_space = strrpos($text_cutted, " ");
        if (
$last_space > 3) {
           
$newtext = substr($text_cutted, 0, $last_space);
        } else {
           
$newtext = $text_cutted;
        }
       
$text = $newtext . '...';
    }
    return
$text;
}
?>

Perfetto - per le tue esigenze, presumo. Le specifiche sono molto più semplice, quindi richiede meno codice. Ma eviti nomi in cinese - potrebbe causare problemi, tipo 上海 (Shanghai) perchè strlen("上海") torna con 6, non 2, mentre mb_strlen("上海", "UTF-8") torna con 2.
Non è un problema per te, perchè non era nelle tue specifiche. Ma Drupal è anche tradotto in chinese - http://drupalchina.org/

HTH

约翰

Più imparo, più dubito.