Page 1 of 1
Allegati in alcune pagine (Risolto con UDT!)
Posted: Fri Jun 20, 2008 6:29 am
by ingegnimultimediali
Nel progetto che sto portando avanti in questo periodo con cmsms mi sono trovato nella situazione di inserire degli allegati solo in alcune pagine. Praticamente se ad una pagina devono essere collegati degli allegati, creo la categoria all'interno del modulo upload che chiamo esattamente come l'alias della pagina: questo mi aiuta a scrivere una sola volta lo smarty che mi richiama gli allegati:
Code: Select all
{cms_module module="Uploads" category=$page_alias mode="detailed" sortorder="date_desc" detailtemplate="sidebar"}
Non sono riuscito però ad automatizzare il problema di attivare il modulo upload solo nella pagine che hanno gli allegati; ho risolto mettendo in OR, all'interno di un {if}, le pagine interessate:
Code: Select all
{if $page_alias == 'alias1' || $page_alias == 'alias2'}
<div id="allegati">
<img src="images/menu_allegati.gif" alt="menu che elenca gli allegati" border="0" />
{cms_module module="Uploads" category=$page_alias mode="detailed" sortorder="date_desc" detailtemplate="sidebar"}
</div>
{/if}
Mi chiedevo ora come si potrebbe fare, magari creando un tag personalizzato, a gestire un if che ritorni TRUE solo se il modulo UPLOAD ha una categoria che si chiama esattamente come il $page_alias. Ciò permetterebbe di scrivere la sintassi solo una volta nel template, senza pensare alle pagine nelle quali si deve attivare.
Qualcuno mi può fornire un aiuto a risolvere questa situazione o ha qualche altra idea per risolvere il problema?

Grazie a tutti
Re: Allegati in alcune pagine
Posted: Fri Jun 20, 2008 7:01 am
by alby
ingegnimultimediali wrote:
Nel progetto che sto portando avanti in questo periodo con cmsms mi sono trovato nella situazione di inserire degli allegati solo in alcune pagine. Praticamente se ad una pagina devono essere collegati degli allegati, creo la categoria all'interno del modulo upload che chiamo esattamente come l'alias della pagina: questo mi aiuta a scrivere una sola volta lo smarty che mi richiama gli allegati:
Code: Select all
{cms_module module="Uploads" category=$page_alias mode="detailed" sortorder="date_desc" detailtemplate="sidebar"}
Non sono riuscito però ad automatizzare il problema di attivare il modulo upload solo nella pagine che hanno gli allegati; ho risolto mettendo in OR, all'interno di un {if}, le pagine interessate:
Code: Select all
{if $page_alias == 'alias1' || $page_alias == 'alias2'}
<div id="allegati">
<img src="images/menu_allegati.gif" alt="menu che elenca gli allegati" border="0" />
{cms_module module="Uploads" category=$page_alias mode="detailed" sortorder="date_desc" detailtemplate="sidebar"}
</div>
{/if}
Si potrebbe con un UDT che chiama Upload e controlla se ha una categoria $page_alias.
Basta metterlo in automatico nel metadata o anche nel template {myudt pagina=$page_alias} e setta una variabile smarty ($category_upload) a true/false.
Poi nella pagina:
Code: Select all
{if $category_upload}
visualizza il tag
{/if}
Io non conosco Upload se ha un metodo per il check della categoria oppure cosa esce con il tag: {cms_module module="Uploads" category=$page_alias}
su questo bisogna giocarci un pò
Alby
Re: Allegati in alcune pagine
Posted: Fri Jun 20, 2008 7:53 am
by ingegnimultimediali
grazie!
provo un po e poi posto la soluzione.
comunque {cms_module module="Uploads" category=$page_alias} funziona e l'ho già testato. Se la categoria è presente ti fa vedere i files altrimenti esce il warning "Errore! categoria non presente".
Re: Allegati in alcune pagine
Posted: Tue Jun 24, 2008 8:01 am
by ingegnimultimediali
alby ho trovato il seguente metodo nel file Uploads.module.php che da quello che vedo mi dovrebbe ritornare false se la categoria non è presente:
Code: Select all
function getCategoryFromName($name)
{
$db =& $this->GetDb();
$query =
"SELECT * FROM ".cms_db_prefix ().
"module_uploads_categories WHERE upload_category_name = ?";
$dbresult = $db->Execute ($query, array ($name));
$row = $dbresult->FetchRow();
if( !$row )
{
return false;
}
return $row;
}
Mi daresti un suggerimento per come fare, nel creare l'UDT, a richiamare proprio quella funzione di quel file?
Re: Allegati in alcune pagine
Posted: Tue Jun 24, 2008 8:44 am
by alby
ingegnimultimediali wrote:
Mi daresti un suggerimento per come fare, nel creare l'UDT, a richiamare proprio quella funzione di quel file?
global $gCms;
$smarty =& $gCms->GetSmarty();
$uploads =& $gCms->modules['Uploads']['object'];
$cat_uploads = false;
if ( ($uploads) && (isset($params['alias'])) && ($uploads->getCategoryFromName($params['alias'])) )
$cat_uploads = true;
}
$smarty->assign('cat_uploads', $cat_uploads);
Tutto da verificare ..........
{myudt alias=$page_alias}
e check con {if $cat_uploads} ..... {/if}
Alby
Re: Allegati in alcune pagine
Posted: Tue Jun 24, 2008 9:05 am
by ingegnimultimediali
BINGOOO!!
Alby avevi dubbi che il test avesse esito negativo??
Ecco qui la soluzione definitiva.
per avere degli allegati solo in una pagina occorre creare, nel modulo Uploads, una categoria denominata con il nome della pagina.
Dopodichè si crea il seguente UDT denominato in questo caso check_allegati:
Code: Select all
global $gCms;
$smarty =& $gCms->GetSmarty();
$uploads =& $gCms->modules['Uploads']['object'];
$cat_uploads = false;
if ( ($uploads) && (isset($params['alias'])) && ($uploads->getCategoryFromName($params['alias'])) ){
$cat_uploads = true;
}
$smarty->assign('cat_uploads', $cat_uploads);
Infine nel template della pagina si inserisce il seguente codice:
Code: Select all
{check_allegati alias=$page_alias}
{if $cat_uploads}
<div id="allegati">
{cms_module module="Uploads" category=$page_alias mode="detailed" sortorder="date_desc" detailtemplate="sidebar"}
</div>
{/if}
Io sto trovando tale funzionalità molto utilie.
Grazie ancora per l'aiuto al grande alby!