Giusto per dare un'idea di cosa sto facendo posto la struttura frontend del componente e parti di codice.
com_wtcalendar
folder "site":
- controller.php
- wtcalendar.php
- index.html
folder "site/views"
folder "site/views/wtcalendar"
folder "site/views/wtcalendar/tmpl"
- default.php
- index.html
- default.xml
- information.php
folder "sites/models"
site/controller.php
jimport('joomla.application.component.controller');
/**
* WT Component Controller
*
* @package com_wtcalendar
*/
class WTCalendarController extends JController
{
/**
* constructor (registers additional tasks to methods)
* @return void
*/
function __construct()
{
parent::__construct();
$this->registerTask('', 'display'); // THERE IS NO "task" IN THE URI
$this->registerTask('info', 'info');
//$this->return_url = '&task='.$this->task;
echo '<br />wtcalendar.php construct controller: '.$controller;
}
function display() {
JRequest::setVar( 'view', 'wtcalendar' );
JRequest::setVar( 'layout', 'default' );
//JRequest::setVar( 'task', $this->task );
parent::display();
}
function info() {
JRequest::setVar( 'view', 'wtcalendar' );
JRequest::setVar( 'layout', 'information' );
//JRequest::setVar( 'task', $this->task );
parent::display();
}
}
site/wtcalendar.php
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import joomla controller library
jimport('joomla.application.component.controller');
// Get an instance of the controller prefixed by WTCalendar
$controller = JController::getInstance('WTCalendar');
// Perform the Request task
$controller->execute(JRequest::getCmd('task'));
// Redirect if set by the controller
$controller->redirect();
sites/views/view.html.php
jimport( 'joomla.application.component.view');
/**
* WT HTML View Class
*
* @package Joomla.Component
* @subpackage com_wtcalendar
*/
class WTCalendarViewWTCalendar extends JView
{
function display($tpl = null) {
switch($this->_layout) {
case "default":
$this->general();
break;
case "information":
$this->info();
break;
}
parent::display($tpl);
}
/*
* Funzione per richiamare il calendario generale
*/
function general() {
define('ROW', 20);
$model = $this->getModel('Wtcalendar');
$sports = $this->get( 'Sports' );
$calendarRowCount = $this->get('CalendarRowCounter');
$page = JRequest::getVar( 'page', array(0), '', 'array' );
if (empty($page[0])) $page[0]=1;
$model->setPerPage($page[0], ROW);
$pageControl = $model->calculatePages($calendarRowCount, (int)$page[0]);
$filter = JRequest::getVar( 'FiltraGaraLocalita', array(0), '', 'array' );
if (!empty($filter[0])) $model->setSearchFilter(mysql_real_escape_string($filter[0]));
$calendars = $this->get('Calendar');
for ($x = 0; $x < ROW; $x++) {
$calendar = &$calendars[$x];
foreach ($sports as $sport) {
if ($sport['IDSport'] == $calendar['IDSport']) $calendar['Sport'] = $sport['Sport'];
}
}
$this->assignRef( 'calendars', $calendars );
$this->assignRef( 'sports', $sports );
$this->assignRef( 'pageControl', $pageControl );
}
function info() {
$model = $this->getModel('Wtcalendar');
$idcalendar = JRequest::getVar( 'IDCalendar', array(0), '', 'array' );
if (!empty($idcalendar[0])) {
$model->resetQueryLimit();
$model->setIDFilter($idcalendar[0]);
}
$enrollments = $this->get('Enrollments');
$sports = $this->get( 'Sports' );
$calendars = $this->get('Calendar');
$calendar = &$calendars[0];
foreach ($sports as $sport) {
if ($sport['IDSport'] == $calendar['IDSport']) $calendar['Sport'] = $sport['Sport'];
}
foreach ($enrollments as $enrollment) {
if ($enrollment['IDEnrollment'] == $calendar['IDEnrollment']) {
$calendar['DateStartEnrollment'] = $enrollment['DateStartEnrollment'];
$calendar['DateEndEnrollment'] = $enrollment['DateEndEnrollment'];
}
}
$this->assignRef( 'calendars', $calendars );
$this->assignRef( 'pageControl', $pageControl );
}
}
site/views/tmpl/default.php
<a href="index.php?option=com_wtcalendar&task=info&view=wtcalendar&layout=information&IDCalendar=118">prova</a>
Mi sembra di aver gestito la struttura in modo corretto, sbaglio? Grazie dell'aiuto.