Premetto che non eccello in raffinatezza... ciò è dovuto al fatto che seguo molti progetti e zero aiuti.
Quindi sono più orientato a fare le cose in modo che funzionino piuttosto che renderle belle e perfette. Adesso ti do un altra parte di codice molto ruspante ma che funziona al 100%.
Ma quando chiedi qualcosa o manifesti un problema cerca di essere più specifico possibile altrimenti non capisco bene dove ti intoppi e stiamo a parlare giorni senza concludere.
Probabilmente tu stai scrivendo il componente non dalla parte admin ma dalla parte site, quindi dentro la cartella del tuo componente adesso avrai due cartelle: admin e
site.
Dentro site abbiamo i soliti files php: index.html (vuoto),
controller.php e
coupons.php.
Il codice che di solito uso dentro il controller è questo:
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport('joomla.application.component.controller');
class CouponsController extends JController{
function display()
{
$viewName = JRequest::getCmd( 'view', $this->getName() );
parent::display();
}
}
Nel copons.php scrivi:
<?php
defined('_JEXEC') or die('Restricted access');
// import joomla controller library
jimport('joomla.application.component.controller');
$controller = JController::getInstance('Coupons');
$controller->execute(JRequest::getCmd('task'));
$controller->redirect();
Adesso supponiamo tu abbia due cartelle dentro view: coupons e search
Una è quella di default per il tuo componente e l'altra una ricerca (poi adatti il codice anche ad altre, questo è solo un esempio).
dentro coupons, c'è il solito file view.htm.php e tutto il resto che ti ho già detto nell'altro post, nel codice scrivi:
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.application.component.view');
class CouponsViewCoupons extends JView
{
function display($tpl = null)
{
//Se hai una directory models e fai eseguire una query al db la metti qui così
$model =& $this->getModel();
//Altrimenti lasci solo la chiamata al template
parent::display($tpl);
}
}
E questo funziona come già ti stava funzionando l'altro, ora passiamo a una seconda view search.php (che ti interessa di più):
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.application.component.view');
class CouponsViewSearch extends JView
{
function display($tpl = null)
{
$model =& $this->getModel();
parent::display($tpl);
}
}
Come vedi è sempre la solita pappa, cambiano solo i nomi.
Prova così, vedrai che funziona al 100%.
Inoltre, per concludere gli esempi, se ti necessita creare una voce di menù che punta direttamente alla view search, devi inserire un file dentro tmpl che si chiama:
default.xmlIl codice che uso io è questo:
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<layout title="COM_COUPONS_COUPONS_VIEW_DEFAULT_SEARCH">
<message>COM_COUPONS_COUPONS_VIEW_DEFAULT_SEARCH_DESC</message>
</layout>
</metadata>
Le scritte in maiuscolo verranno tradotte dal file della lingua, ma questa è un altra puntata.
Il componente va compresso, deinstallato e reinstallato, se hai un editor "fico" (tipo netbeans), dopo che hai installato il componente e ti sta funzionando puoi dargli i settaggi FTP ed editare le tue modifiche direttamente sul sito in produzione. Fai molto prima e secondo me è una gran figata.
Mi dico sempre che dovrei scrivere una guida su come fare, ma il mio dannatissimo tempo scorre più in fretta del vostro

Ciao