Salve! Sto cercando di creare un modulo di ricerca partendo da quello di virtuemart(mod_virtuemart_search.php) in cui, al posto di inserire il testo da cercare, la scelta sia condizionata da due menù a tendina concatenati. I menù sono popolati tramite php che si va a cercare due tabelle nella root del database di joomla.
Ho creato il modulo ma se lo attivo, mi scompare tutta la home e appare solo un menù a tendina vuoto.
Il modulo è composto dai seguenti file:
-mod_virtuemart_search3.php
<?php
include_once 'select.class.php';
$opt = new SelectList();
if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
if( file_exists(dirname(__FILE__).'/../../components/com_virtuemart/virtuemart_parser.php' )) {
require_once( dirname(__FILE__).'/../../components/com_virtuemart/virtuemart_parser.php' );
} else {
require_once( dirname(__FILE__).'/../components/com_virtuemart/virtuemart_parser.php' );
}
global $VM_LANG, $mm_action_url, $sess;
?>
<form action="<?php $sess->purl( $mm_action_url."index.php?page=shop.browse" ) ?>" id="myform" method="post">
Seleziona una marca:<br />
<select id="marche">
<?php echo $opt->ShowMarca(); ?>
</select>
<br /><br />
Seleziona un modello:<br />
<select id="modelli">
<option>Scegli...</option>
</select>
<br /><br />
<p><label for="keyword"><?php echo $VM_LANG->_('PHPSHOP_SEARCH_LBL') ?></label></p>
<p>
<input name="keyword" type="hidden" title="<?php echo $VM_LANG->_('PHPSHOP_SEARCH_TITLE') ?>" value=$res id="keyword" />
<input class="button" type="submit" name="Search" value="<?php echo $VM_LANG->_('PHPSHOP_SEARCH_TITLE') ?>" />
</p>
</div>
</form>
mod_virtuemart_search3.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE install SYSTEM "http://www.joomla.org/xml/dtd/1.5/module-install.dtd">
<install type="module" version="1.5.0">
<name>VirtueMart Search3</name>
<description>Shows the product search field</description>
<files>
<filename module="mod_virtuemart_search3">mod_virtuemart_search3.php</filename>
<filename>db_config.php</filename>
<filename>select.class.php</filename>
<filename>select.php</filename>
</files>
<params>
<param name="moduleclass_sfx" type="text" default=""
label="Module Class Suffix"
description="A suffix to be applied to the css class of the module (table.moduletable), this allows individual module styling" />
<param name="class_sfx" type="text" default=""
label="Menu Class Suffix"
description="A suffix to be applied to the css class of the menu items" />
</params>
</install>
select.class.php
<?php
class SelectList
{
protected $conn;
public function __construct()
{
$this->DbConnect();
}
protected function DbConnect()
{
include "db_config.php";
$this->conn = mysql_connect($host,$user,$password) OR die("Impossibile connettersi al database");
mysql_select_db($db,$this->conn) OR die("Impossibile selezionare il database $db");
return TRUE;
}
public function ShowMarche()
{
$sql = "SELECT * FROM marche";
$res = mysql_query($sql,$this->conn);
$marche = '<option value="0">scegli...</option>';
while($row = mysql_fetch_array($res))
{
$marche .= '<option value="' . $row['id_marca'] . '">' . utf8_encode($row['nome_marca']) . '</option>';
}
return $marche;
}
public function ShowModelli()
{
$sql = "SELECT * FROM modelli WHERE id_reg=$_POST[id_reg]";
$res = mysql_query($sql,$this->conn);
$modelli = '<option value="0">scegli...</option>';
while($row = mysql_fetch_array($res))
{
$modelli .= '<option value="' . $row['id_modello'] . '">' . utf8_encode($row['nome_modelli']) . '</option>';
}
return $modelli;
}
}
?>
select.php
<?php
include_once 'select.class.php';
$opt = new SelectList();
if(isset($_POST['id_marca']))
{
echo $opt->ShowModelli();
die;
}
?>
Manca il db_config.php ma ci sono solo i parametri di connessione.
Ho aggiunto al file index.php nella cartella ../templates/miotemplate/ sia la libreria di jQuery che lo script seguente, tutto fra i tag HEAD
<script type="text/javascript" src="jquery-1.3.2.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var scegli = '<option value="0">Scegli...</option>';
var attendere = '<option value="0">Attendere...</option>';
$("select#modelli").html(scegli);
$("select#modelli").attr("disabled", "disabled");
$("select#marche").change(function(){
var marca = $("select#marche option:selected").attr('value');
$("select#modelli").html(attendere);
$("select#modelli").attr("disabled", "disabled");
$.post("select.php", {id_marca:marca}, function(data){
$("select#modelli").removeAttr("disabled");
$("select#modelli").html(data);
});
});
});
</script>
Qualcuno mi può dare una mano?