Joomla.it Forum

Non solo Joomla... => Sviluppo => : cosimo84 22 Jul 2009, 16:55:56

: Passare il parametro Itemid nel wrapper
: cosimo84 22 Jul 2009, 16:55:56
Ciao, non so se qualcuno ha avuto i miei stessi problemi, comunque sono riuscito a modificare il codice del componente "wrapper" in modo da far passare il parametro Itemid.

La modifica consiste nell'editare il file /components/com_wrapper/views/wrapper/tmpl/default.php
in questo modo:

:
<?php // no direct access
defined('_JEXEC') or die('Restricted access'); ?>

<script language="javascript" type="text/javascript">
function iFrameHeight() {
var h = 0;
if ( !document.all ) {
h = document.getElementById('blockrandom').contentDocument.height;
document.getElementById('blockrandom').style.height = h + 60 + 'px';
} else if( document.all ) {
h = document.frames('blockrandom').document.body.scrollHeight;
document.all.blockrandom.style.height = h + 20 + 'px';
}
}
</script>
<div class="contentpane<?php echo $this->escape($this->params->get('pageclass_sfx')); ?>">
<?php if ( $this->params->get'show_page_title') ) : ?>
<div class="componentheading<?php echo $this->escape($this->params->get('pageclass_sfx')); ?>">
<?php echo $this->escape($this->params->get'page_title' )); ?>
</div>
<?php endif; ?>
<?php 
$Itemid
=$_GET["Itemid"];
?>

<iframe <?php echo $this->wrapper->load?>
id="blockrandom"
name="iframe"
src="<?php echo $this->wrapper->url."?id_r=".$Itemid?>"
width="<?php echo $this->params->get'width' ); ?>"
height="<?php echo $this->params->get'height' ); ?>"
scrolling="<?php echo $this->params->get'scrolling' ); ?>"
align="top"
frameborder="0"
class="wrapper<?php echo $this->escape($this->params->get('pageclass_sfx')); ?>">
<?php echo JText::_'NO_IFRAMES' ); ?>
</iframe>
</div>

In seguito, in qualsiasi file php del wrapper basta richiamare la variabile id_r tramite $id_r=$_GET["id_r"] che corrisponde all'Itemid dell'oggetto wrapper.

Mi scuso se qualcuno già l'aveva scoperto e spero di essere stato utile.

Ciao

--Cosimo
: Re:Passare il parametro Itemid nel wrapper
: 56francesco 22 Jul 2009, 17:04:08
ciao Cosimo84  credo che sia un argomento più attinente alla sezione sviluppo, anche se probabilmente la modifica era pensata per i forum?

che ne pensi?
a proposito, su che versione joomla hai operato la modifica?
: Re:Passare il parametro Itemid nel wrapper
: cosimo84 22 Jul 2009, 17:09:33
ciao Cosimo84  credo che sia un argomento più attinente alla sezione sviluppo, anche se probabilmente la modifica era pensata per i forum?

che ne pensi?
a proposito, su che versione joomla hai operato la modifica?

Ciao 56francesco,
mi scuso se ho postato nella sezione sbagliata e ti ringrazio per averla spostata.
Ho operato la modifica su Joomla! 1.5, può essere utilizzata anche per i forum.
E' molto utile in quanto il parametro "Itemid" dei componenti non è visibile all'interno dei vari php che compongono il wrapper (o gli altri componenti) e può essere utile per fare degli if selettivi in base a questo id.

Spero sia utile a qualcuno  ;)
: Re:Passare il parametro Itemid nel wrapper
: 56francesco 22 Jul 2009, 17:19:46
1.5?
cosimo non potresti essere più preciso?
: Re:Passare il parametro Itemid nel wrapper
: cosimo84 22 Jul 2009, 17:20:45
Scusa hai ragione, versione 1.5.12
: Re:Passare il parametro Itemid nel wrapper
: Oni_01 30 Oct 2010, 22:39:31
Grazie cosimo, il tuo script mi è stato molto utile per risolvere un problema che avevo su un template :D
: Re:Passare il parametro Itemid nel wrapper
: mau_develop 31 Oct 2010, 09:16:10
$id_r=$_GET["id_r"]
-------------------------------

questo è valido come snippet, esempio, ...non fate una cosa simile, non si prendono le var direttamente dai get post etc.

M.
: Re:Passare il parametro Itemid nel wrapper
: waltersao 04 Nov 2010, 11:49:16
@mau
Ciao, sempre graditi i tuoi interventi: :)
Forse ho letto qualcosa in merito, di tuo o di altri: potresti spendere qualche parola? ;) TIA

1.  $Itemid=$_GET["Itemid"];
2.  $id_r=$_GET["id_r"]

: Re:Passare il parametro Itemid nel wrapper
: mau_develop 04 Nov 2010, 14:28:58
ogni variabile presa dall'esterno, quindi non creata runtime, va sottoposta a casting... proprio come il grande fratello :):)

si attendono un buffone che attiri l'attenzione per mesi su una popolazione con limitato uso del cervello e quello devono trovare, così fanno un casting per vedere se il buffone atteso è veramente un buffone o fa finta.

Sì fa ridere ma il principio è il medesimo... ti attendi un id, quindi un numero e devi controllare che sia veramente ciò che ti attendi, quante più cose controlli tante meno probabilità di usi non consoni si creano; ovviamente l'errore va gestito.

Joomla solitamente usa i vari JRequest getVar piuttosto che getInt, poi dei parametri di casting come argomenti:
http://api.joomla.org/Joomla-Framework/Environment/JRequest.html

Se fossimo fuori da joomla la cosa non cambia, un:

$pippo=$_GET['id'];

va prima sottoposto a controlli, cosa facilitata da varie funzioni di php, chessò:

if(is_numeric($_GET['id'])){
   $pippo=$_GET['id'];

ma puoi anche fare controlli più specifici se sai ad esempio che quel numero non sarà mai più di 3 cifre:
if( is_numeric($_GET['id']) && strlen($_GET['id']) <= 3 ){
   $pippo=$_GET['id'];

..o complicarti la vita con le regex cercando un pattern esclusivamente [0-9]+ ... o [0-9]{3} ..per il discorso delle tre cifre sopra.

M.
: Re:Passare il parametro Itemid nel wrapper
: tampe125 06 Nov 2010, 12:36:32
ogni variabile presa dall'esterno, quindi non creata runtime, va sottoposta a casting... proprio come il grande fratello :):)

si attendono un buffone che attiri l'attenzione per mesi su una popolazione con limitato uso del cervello e quello devono trovare, così fanno un casting per vedere se il buffone atteso è veramente un buffone o fa finta.

vado un attimo OT, ma devo dire che in questo modo mi ricorderò SEMPRE di fare il casting :D
: Re:Passare il parametro Itemid nel wrapper
: waltersao 09 Nov 2010, 22:54:40
@mau

Chiarissimo, esauriente e utile. Grazie.