(Purtoppo per voi sono fermamente deciso ad imparare questo CMS

Scusate se stavolta mi permetto un post così lungo, ma mi sembrava l'unico modo per spiegare i problemi che incontro.
Sto cercando di imparare a realizzare un modulo.
Ho copiato Skeleton, ne sto modificando i file, ed ho aggiunto delle tabelle al database.
L'idea è quella di permettere ad un visitatore del sito di scegliere il modello e la versione della propria auto e visualizzare quindi l'elenco dei controlli previsti dalla casa costruttrice.
In pratica ho creato 3 tabelle nel DB:
1) cms_module_tagliandi
2) cms_module_tagliandi_modelli
3) cms_module_tagliandi_versioni
(in realtà le tabelle sono 6 perché di ognuna ho creato anche la corrispettiva con suffisso "_seq". Non so ancora a che serve ma ho seguito Skeleton).
DUMP delle tabelle:
Code: Select all
-- Struttura della tabella `cms_module_tagliandi`
--
CREATE TABLE `cms_module_tagliandi` (
`id_tagliando` int(11) NOT NULL auto_increment,
`id_versione` int(11) default '0',
`KM` char(50) default NULL,
`olio_motore` tinyint(1) default NULL,
`filtro_olio` tinyint(1) default NULL,
`filtro_aria` tinyint(1) default NULL,
`filtro_abitacolo` tinyint(1) default NULL,
`filtro_carburante` tinyint(1) default NULL,
`sost_olio_freni` tinyint(1) default NULL,
`candela_accensione` tinyint(1) default NULL,
`guarnizione_tenuta` tinyint(1) default NULL,
`sost_olio_cambio` tinyint(1) default NULL,
`paraflu` tinyint(1) default NULL,
`cinghia_trasmissione` tinyint(1) default NULL,
`candela_preriscaldamento` tinyint(1) default NULL,
PRIMARY KEY (`id_tagliando`),
KEY `id_tagliando` (`id_tagliando`),
KEY `id_versione` (`id_versione`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=207 ;
-- Struttura della tabella `cms_module_tagliandi_modelli`
--
CREATE TABLE `cms_module_tagliandi_modelli` (
`id_modello` int(11) NOT NULL auto_increment,
`nome_modello` char(50) default NULL,
PRIMARY KEY (`id_modello`),
KEY `id_modello` (`id_modello`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;
-- Struttura della tabella `cms_module_tagliandi_versioni`
--
CREATE TABLE `cms_module_tagliandi_versioni` (
`id_versione` int(11) NOT NULL auto_increment,
`id_modello` int(11) default '0',
`cilindrata` char(50) default NULL,
`carburante` char(50) default NULL,
PRIMARY KEY (`id_versione`),
KEY `id_modello` (`id_modello`),
KEY `id_versione` (`id_versione`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=53 ;
Nella pagina action.default.php sono riuscito ad effettuare una query che valorizza degli array. Creo anche un FORM con pulsante SUBMIT che "dovrebbe" passare la scelta del modello/versione auto ad una pagina che effettua una SELECT sulla tabella dei Tagliandi.
CODICE pagina action.default.php:
Code: Select all
<?php
if (!isset($gCms)) exit;
// get our records from the database
$db = &$gCms->GetDb();
if (isset($params['id_versione']))
{
if ($params['id_versione']=="")
{
$params['id_versione']=1;
}
$query = 'SELECT *
FROM '.cms_db_prefix().'module_tagliandi
WHERE id_versione = ?';
$result = $db->Execute($query,array($params['id_versione']));
while ($result !== false && $row=$result->FetchRow())
{
// create a new object for every record that we retrieve
$rec = new stdClass();
$rec->KM = $row['KM'];
$rec->olio_motore = $row['olio_motore'];
$rec->filtro_olio = $row['filtro_olio'];
$rec->filtro_aria = $row['filtro_aria'];
$rec->filtro_abitacolo = $row['filtro_abitacolo'];
$rec->filtro_carburante = $row['filtro_carburante'];
$rec->sost_olio_freni = $row['sost_olio_freni'];
$rec->candela_accensione = $row['candela_accensione'];
$rec->guarnizione_tenuta = $row['guarnizione_tenuta'];
$rec->sost_olio_cambio = $row['sost_olio_cambio'];
$rec->paraflu = $row['paraflu'];
$rec->cinghia_trasmissione = $row['cinghia_trasmissione'];
$rec->candela_preriscaldamento = $row['candela_preriscaldamento'];
array_push($records,$rec);
}
$sid = $row['id_versione']; // stupid -- we're passing the param, and then using the database version.
}
else
{
$list = array();
$query = "SELECT ".cms_db_prefix()."module_tagliandi_modelli.id_modello, ".cms_db_prefix()."module_tagliandi_modelli.nome_modello, cilindrata, carburante, ".cms_db_prefix()."module_tagliandi_versioni.id_versione
FROM ".cms_db_prefix()."module_tagliandi_modelli
INNER JOIN ".cms_db_prefix()."module_tagliandi_versioni ON ".cms_db_prefix()."module_tagliandi_modelli.id_modello = ".cms_db_prefix()."module_tagliandi_versioni.id_modello
ORDER BY ".cms_db_prefix()."module_tagliandi_modelli.nome_modello, ".cms_db_prefix()."module_tagliandi_versioni.carburante, ".cms_db_prefix()."module_tagliandi_versioni.cilindrata";
$result = $db->Execute($query);
$records = array();
while ($result !== false && $row=$result->FetchRow())
{
// create a new object for every record that we retrieve
$rec = new stdClass();
$rec->id = $row['id_versione'];
$rec->modello = $row['nome_modello'];
$rec->cilindrata = $row['cilindrata'];
$rec->carburante = $row['carburante'];
// create attributes for rendering "view" links for the object.
// $id and $returnid are predefined for us by the module API
$rec->view = $this->CreateFrontendLink($id, $returnid, 'default', $this->Lang('link_view'),
array('id_modello'=>$rec->id));
$rec->edit = $this->CreateFrontendLink($id, $returnid, 'add_edit', $this->Lang('edit'),
array('id_modello'=>$rec->id));
array_push($records,$rec);
}
$sid = $row['id_versione']; // stupid -- we're passing the param, and then using the database version.
}
$smarty->assign('start_form', $this->CreateFormStart($id, 'form_modelli', $returnid));
// Expose the list to smarty. Use "by_ref" to save memory.
$this->smarty->assign_by_ref('records',$records);
// and a count of records
$this->smarty->assign('title_num_records',$this->Lang('title_num_records',array(count($records))));
// pass a hidden key value along with the submit button
$smarty->assign('submit', $this->CreateInputHidden($id,'id_versione',$sid).$this->CreateInputSubmit($id, 'submit', $this->Lang('submit')));
$smarty->assign('end_form', $this->CreateFormEnd());
// Display the populated template
echo $this->ProcessTemplate('tagliandi_list.tpl');
?>
Nel template "tagliandi_list.tpl" popolo un dropdown menu con i valori generati in action.default.php.
TEMPLATE:
Code: Select all
{if isset($module_message)}<h2>{$module_message|escape}</h2>{/if}
<h3>{$title_num_records}</h3>
{$start_form} {**** scrive l'inizio del FORM, assegnato a Smarty in action.default.php, riga 54 ****}
{assign var="my_modello" value=""}
<select name="modelli" id="modelli">
{foreach from=$records item=entry}
<h1>{$entry->KM}</h1> {* --- TEST --- *}
{if $entry->modello neq $my_modello}
<option value="" style=" background-color:#FFFFCC; border:1px solid gray; text-align:center;">{$entry->modello}</option>
{/if}
<option value="{$entry->id}" {if $entry->carburante eq "diesel"} style="color:#666;"{/if}>{$entry->cilindrata} -
{$entry->carburante}
</option>
{assign var="my_modello" value=$entry->modello}
{/foreach}
</select>
{$submit}
{$end_form}
({$entry->view}|{$entry->edit})
{ get_template_vars }
RISULTATO:
Quando nel front-end scelgo una modello/versione di auto dal menu a discesa e clicco su INVIA, ottengo una pagina vuota con un errore:
Code: Select all
Warning: Parameter submit is not known... dropped in /var/www/siti/test/lib/misc.functions.php on line 1347
Quello che non riesco a capire, è (tra le molte cose..):
1) come vengono passate le variabili tra le "pagine"; ovvero come faccio a passare l'id_versione, che mi serve nella query di selezione dei Tagliandi.
2) cosa sono e come vengono valorizzate le variabili: $id, $sid, $returnid
3) action.default.php è la pagina in cui ho messo il codice, seguendo Skeleton. Ma perché viene utilizzata questa? Le altre (action.add_edit.php, action.defaultadmin.php ecc.) hanno tutte dei nomi convenzionali che il CMS già conosce?
Grazie e Buona domenica