Joomla.it Forum

Non solo Joomla... => Sviluppo => : francesca.delpiccolo 14 Mar 2010, 19:59:31

: [RISOLTO] Richiamare l'id dell'articolo visualizzato/attivo
: francesca.delpiccolo 14 Mar 2010, 19:59:31
Ciao,
ho fatto diverse ricerche nel forum ma non sono riuscita a trovare le informazioni che mi servono per cui chiedo il vostro aiuto...

Ho modificato il file "helper.php" del modulo "lastnews", perchè vorrei che nella lista degli articoli fosse visibilmente e graficamente chiaro qual è l'articolo attivo.

Ho usato un IF, ma c'è qualcosa di sbagliato nella condizione:

if($row->access <= $aid){
            
         $lists[$i]->text = "<div class=\"anno\" style=\"color: #000;\">".htmlspecialchars( $row->created_by_alias )."</div><div class=\"gif\"><img src=\"images/loghetto.gif\" /></div><div class=\"nome_progetto\" style=\"color: #000;\">".htmlspecialchars( $row->title )."</div>";
         $i++;
         
         } else {
            
         $lists[$i]->text = "<div class=\"anno\">".htmlspecialchars( $row->created_by_alias )."</div><div class=\"gif\">&nbsp;</div><div class=\"nome_progetto\">".htmlspecialchars( $row->title )."</div>";
         $i++;
         
         }


infatti dicendogli "$row->access <= $aid" la condizione risulta true, ma visualizzo tutta la lista allo stesso modo.

Qual è il codice corretto per dirgli "Se l'id-articolo visualizzato è lo stesso id-articolo che c'è nel link" scrivi A altrimenti scrivi B?

Non sono praticissima di PHP, per cui spero di essermi spiegata e spero nel vostro aiuto.
: Re:Richiamare l'id dell'articolo visualizzato/attivo
: mmleoni 15 Mar 2010, 08:24:19
ciao francesca,

aid è l'access id dell'utente, non l'id dell'articolo: serve a vedere se l'utente è autorizzato meno a vedere quel contenuto.

ad intuito direi che dovresti usare il metodo ContentParseRoute del router di com_content per ottenere l'id dell'articolo dall'url e poi confrontarlo con $row->id

ciao,
marco
: Re:Richiamare l'id dell'articolo visualizzato/attivo
: francesca.delpiccolo 15 Mar 2010, 11:22:08
Ciao Marco,
ho trovato la funzione nel file router.php di com_content, ho capito che sostanzialmente tale funzione tira fuori i "pezzetti" del link, ma poichè usa uno switch, non so come richiamare la variabile $vars che contenga proprio il valore dell'id_articolo.

Ti riporto la funzione di seguito, mi potresti gentilmente indicare il codice per ottenere l'id_articolo e quindi confrontarlo con $row->id ?
Ho capito qual è il "case" giusto (ovviamente 'article'), ma alla fine della funzione come richiamo qull'esatto valore che serve a me?

function ContentParseRoute($segments)
{
   $vars = array();

   //Get the active menu item
   $menu =& JSite::getMenu();
   $item =& $menu->getActive();

   // Count route segments
   $count = count($segments);

   //Standard routing for articles
   if(!isset($item))
   {
      $vars['view']  = $segments[0];
      $vars['id']    = $segments[$count - 1];
      return $vars;
   }

   //Handle View and Identifier
   switch($item->query['view'])
   {
      case 'section' :
      {
         if($count == 1) {
            $vars['view'] = 'category';

            if(isset($item->query['layout']) && $item->query['layout'] == 'blog') {
               $vars['layout'] = 'blog';
            }
         }

         if($count == 2) {
            $vars['view']  = 'article';
            $vars['catid'] = $segments[$count-2];
         }

         $vars['id']    = $segments[$count-1];

      } break;

      case 'category'   :
      {
         $vars['id']   = $segments[$count-1];
         $vars['view'] = 'article';

      } break;

      case 'frontpage'   :
      {
         $vars['id']   = $segments[$count-1];
         $vars['view'] = 'article';

      } break;

      case 'article' :
      {
         $vars['id']     = $segments[$count-1];
         $vars['view'] = 'article';
      } break;

      case 'archive' :
      {
         if($count != 1)
         {
            $vars['year']  = $count >= 2 ? $segments[$count-2] : null;
            $vars['month'] = $segments[$count-1];
            $vars['view']  = 'archive';
         } else {
            $vars['id']     = $segments[$count-1];
            $vars['view'] = 'article';
         }
      }
   }

   return $vars;
}



ps: ho aggiunto un require_once nel file helper.php (mod_latestnews) al router.php di com_content in modo da non "spostare" o toccare la funzione ContentParseRoute.
: Re:Richiamare l'id dell'articolo visualizzato/attivo
: francesca.delpiccolo 17 Mar 2010, 10:32:42
Nessuno riesce ad aiutarmi per favore?
: Re:Richiamare l'id dell'articolo visualizzato/attivo
: mmleoni 18 Mar 2010, 08:07:31
 :( mi spiace ma al momento sono parecchio sotto con il lavoro. se posso cercherò di aiutarti più in là.

per intanto ti sposto nella sezione più adatta...

ciao,
marco

: Re:Richiamare l'id dell'articolo visualizzato/attivo
: francesca.delpiccolo 18 Mar 2010, 14:09:48
Va bene grazie mille, se nel frattempo qualcun'altro potesse darmi una mano...

Grazie in anticipo!
: Re:Richiamare l'id dell'articolo visualizzato/attivo
: mmleoni 19 Mar 2010, 14:49:54
ok, a noi francesca!

allora il codice in helper.php, dalla linea 107 diviene:

:
if($row->access <= $aid)
{
if ( (JRequest::getVar('option')=='com_content') && (JRequest::getVar('view')=='article') ){
$id = explode(':', JRequest::getVar('id'));
$lists[$i]->class = ($row->id == $id[0] ? 'Selected' : '');
}
$lists[$i]->link = JRoute::_(ContentHelperRoute::getArticleRoute($row->slug, $row->catslug, $row->sectionid));
} else {
[... omissis]

ovvero ci sono da aggiungere giusto 4 righe...

poi in tmpl/default.php la riga 6 diviene:

:
<a href="<?php echo $item->link?>" class="latestnews<?php echo $item->class $params->get('moduleclass_sfx'); ?>">

ovvero se stiamo visualizzando l'articolo in questione viene aggiunto Selectedin coda a latestnews, ovviamente qui le modifiche sono banali...

non pulitissimo ma funzionale.

ciao,
marco
: Re:Richiamare l'id dell'articolo visualizzato/attivo
: francesca.delpiccolo 20 Mar 2010, 14:05:15
Grande Marco,
risultato perfetto e grazie mille!