Gestione dei miei contenuti multilingua ...

Premetto che sto utlizzando la classe CDbSourceMessage per gestire i miei contenuti multilinuga. Premetto anche che la voglio usare in un modo leggermente differente: nel codice scriverò Yii::t(‘categoria’,‘messaggio’); ma messaggio sarà un “identificatore” nel senso che nella tanbella Message avrò ANCHE il messaggio in italiano. Per essere più precisi avrò TUTTE le tradizioni. Questo perchè devo gestire grossi quantitativi di testo e perchè voglio abilitarmi a gestire totalmente il contenuto della pagina.

Per chi non usa o non ricorda come funziona CDbMessageSource

Un’altra premessa va fatta per quanto riguarda Jquery: utilizzo un widget che, vi ricordo, ad ogni nodo prevede un array del tipo:




array(

    'text' => 'testo che appare',

    'chilndren' => array(

         array(

            array('text' => 'nodo figlio'),

            array('text' => 'nodo figlio'),

            array('text' => 'nodo figlio'),

            array('text' => 'nodo figlio'),

         )

    ),

);



Detto questo, ho iniziato ad arricchire il mio model in questo modo: un metodo per caricare tutte le categorie, uno per contare il numero di messaggi, uno per restituire tutti i testi di una categoria, uno che restituisse l’intero albero.





  public static function findAllCategory() {

    return SourceMessage::model()->findAll(array(

        'select' => 'distinct(category)',

    ));

  }


  public static function countHowManyCategory($category) {

    $arrayCounter = SourceMessage::model()->findAll(array(

          'select' => 'count(category) category',

          'condition' => 'category=:category',

          'params' => array(

              ':category' => $category,

          )

      ));

    foreach ($arrayCounter as $item)

      return $item['category'];

  }


  public static function findAllTextsInACategory($category) {

    $message = SourceMessage::model()->findAll(array(

          'select' => 'message,id',

          'condition' => 'category=:category',

          'params' => array(

              ':category' => $category,

          )

      ));

    $messages = array();

    foreach ($message as $item)

      $messages[] = array(

          'text' => $item['message'],

          'children' => array(

              array('text' => 'it'),

              array('text' => 'en'),

          )

      );

    return $messages;

  }


  public static function contentTree() {

    $arrCategories = array();

    foreach (SourceMessage::findAllCategory() as $item) {

      $arrCategories[] = array(

          'text' => $item['category'] . ' ' . SourceMessage::countHowManyCategory($item['category']),

          'children' => SourceMessage::findAllTextsInACategory($item['category']),

      );

    }

    return $arrCategories;

  }

Ho fatto bene? Vi sembra una buona soluzione? Seguirò con l’uso di TinyMCE che ho già incluso nel mio progetto. L’idea è quella di avere tutti i contenuti raggiungibili da una struttura ad albero da un lato, e l’editor tinymce dall’altro.