Back to top

Autore Topic: [J1.7] Nuovo componente e comprensione task/controller  (Letto 4741 volte)

Offline coldj

  • Nuovo arrivato
  • *
  • Post: 10
    • Mostra profilo
Ciao a tutti,
sono nuovo sia del forum che nello sviluppo di componenti in joomla e avrei bisogno di una mano.
Sto cercando di creare un componente che da frontend mi permetta di richiamare tre funzioni principali:
  • Visualizzare un calendario
  • Visualizzare una classifica
  • Visualizzare un mix delle due funzioni precedenti
In pratica ho associato una voce di menù ad ogni funzione per cui mi trovo "home" che visualizza il mix tra calendario e classifiche, una voce "classifiche" che visualizza le classifiche e una terza voce "calendario" che visualizza il calendario; all'interno del calendario e delle classifiche c'è un'elenco di dati linkabili che portano a una terza e quarta pagina contenente le relative info. Tutto sembra che funzioni perfettamente infatti a seconda della voce di menu cliccata mi trovo nella pagina corretta con relativa voce di menu attiva; il problema nasce quando visualizzo le pagine di informazioni, infatti la pagina viene caricata correttamente ma la voce di menu principale attiva invece di essere "calendario" o "classifiche" passa su "home" e anche il breadcrumbs riporta di essere in homepage. Credo sia un problema di coltroller e/o task ma sto andando in confusione e non riesco a capirci più niente. Potete darmi qulche indicazione in merito? Per un'architettura simile quale sarebbe l'approccio corretto di sviluppo?
Spero di essermi spiegato decentemente.
Grazie a tutti.


Offline coldj

  • Nuovo arrivato
  • *
  • Post: 10
    • Mostra profilo
Re:[J1.7] Nuovo componente e comprensione task/controller
« Risposta #2 il: 11 Dic 2011, 10:28:44 »
Già conosco grazie, ma nonostante abbia cercato di capire la documentazione non riesco a risolvere, sicuramente c'è qualche concetto che mi sfugge o che non ho capito. Qualche suggerimento sarebbe gradito, anche un esempio per capire meglio il problema. Grazie mille.

mau_develop

  • Visitatore
Re:[J1.7] Nuovo componente e comprensione task/controller
« Risposta #3 il: 11 Dic 2011, 14:56:34 »
quello è un esempio.

ma magari ciò che non comprendi è qs:
http://www.joomla.it/articoli-della-community/4190-il-modello-mvc-in-joomla.html

M.

Offline coldj

  • Nuovo arrivato
  • *
  • Post: 10
    • Mostra profilo
Re:[J1.7] Nuovo componente e comprensione task/controller
« Risposta #4 il: 15 Dic 2011, 18:22:06 »
Bene, le idee ce le ho sicuramente più chiare e dovrò fare un po di pratica ma sto maledetto problema non sono riuscito a risolverlo e sono sicuro che alla fine sarà una stupidata. Ho semplificato il componente in modo da gestire solo il calendario e limitare le castronerie che potrebbero uscirne, ho seguito anche la guida http://www.mightyextensions.com/knowledge-base/joomla-tutorials/item/developer-center/44-component-mvc-ajax/758-joomla-hello-world-mvc-component-tutorial che mi pare chiara ma niente da fare, ogni volta che clicco su un link del calendario per visualizzare le relative info, mi apre la pagina correttamente ma è come se venissi reindirizzato alla homapege invece di rimanere sotto il path del calendario (e le info le vedo correttamente, per cui il file php caricato è quello giusto). Fatemi capire dove sbaglio please perchè non mi pare normale un comportamento simile, se serve qualche riga di codice per darvi un'idea del sorgente chiedete e vi sarà dato.
Grazie mille a tutti.

mau_develop

  • Visitatore
Re:[J1.7] Nuovo componente e comprensione task/controller
« Risposta #5 il: 15 Dic 2011, 18:45:04 »
serve che tu crei una struttura come l'esempio che dici di aver letto... non capisco perchè hai seguito quella per un componente di una 1.5 beta quando usi una 1.7.x

M.

Offline coldj

  • Nuovo arrivato
  • *
  • Post: 10
    • Mostra profilo
Re:[J1.7] Nuovo componente e comprensione task/controller
« Risposta #6 il: 16 Dic 2011, 09:55:56 »
Infatti è quello che ho fatto, ho solo adattato l'esempio con dati e funzioni che mi servono realmente ma la struttura è identica, o mi sono perso qualche cosa o sono io che devo darmi all'ippica. Ho utilizzato quella guida per la 1.5 perchè le altre che ho letto non erano così chiare e ho capito di più leggendo quella che tutte le altre trovate per la 1.7; in teoria non dovrebbero esserci molte differenze tra le due versioni per un componente base come il mio poi tutto può essere ma non credo che il problema derivi da questo. Proverò a ricreare solo l'esempio sperando di aver maggior fortuna ma mi sembra di aver già seguito i concetti e la struttura spiegata..boh. Grazie comunque per l'interessamento.

Offline coldj

  • Nuovo arrivato
  • *
  • Post: 10
    • Mostra profilo
Re:[J1.7] Nuovo componente e comprensione task/controller
« Risposta #7 il: 16 Dic 2011, 11:18:42 »
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"
  • index.html
folder "site/views/wtcalendar"
  • view.html.php
  • index.html
folder "site/views/wtcalendar/tmpl"
  • default.php
  • index.html
  • default.xml
  • information.php
folder "sites/models"
  • wtcalendar.php
  • index.html

site/controller.php
Codice: [Seleziona]
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
Codice: [Seleziona]
<?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
Codice: [Seleziona]
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
Codice: [Seleziona]
<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.

Offline coldj

  • Nuovo arrivato
  • *
  • Post: 10
    • Mostra profilo
Re:[J1.7] Nuovo componente e comprensione task/controller
« Risposta #8 il: 16 Dic 2011, 16:00:55 »
Non ci posso credere, ho modificato l'esempio stupido helloworld inserendo una pagina in più che viene richiamata dalla pagina di default del componente tramite link, risultato medesimo dell'altro componente. Indubbiamente c'è qualcosa che non riesco a comprendere.
http://184.172.150.201/~wtadmin/
Cliccate sul titolo "PROVA" e si aprirà una pagina con "PROVA TESTO" che disattiverà il link active sulla voce di menu "Prova" invece di esserne parte. Mi sfugge qualcosa.

mau_develop

  • Visitatore
Re:[J1.7] Nuovo componente e comprensione task/controller
« Risposta #9 il: 16 Dic 2011, 19:08:09 »
inserendo una pagina in più che viene richiamata dalla pagina di default del component
--------------------------------------------------------------------------------------------------------------------------
una pagina in più è una view in più se costruita con altri dati, oppure un template diverso se i dati sono già presenti.
nel primo caso sarà gestito da una nuova task se oltre a nuovi dati occorrono particolari elaborazioni. Ne hai bisogno perchè avrai  altro lavoro da far fare al model..,

nel secondo caso puoi semplicemente chiamare una nuova view. e dovrai aggiungere un nuovo default seguito da _nometemplate per rispettare la sintassi di joomla

M.

secondo me ti preoccupi troppo del tuo obbiettivo... prima devi praticamente seguire passo passo lo sviluppo di com_hello, facendolo anche tu, e cercando di capire quel che fai, perchè è spiegato e quel tutorial serve proprio a questo.

Inoltre, se il tuo problema è a monte ed è lo sviluppo a oggetti ..anche questo è uno studio da fare

 

Offline coldj

  • Nuovo arrivato
  • *
  • Post: 10
    • Mostra profilo
Re:[J1.7] Nuovo componente e comprensione task/controller
« Risposta #10 il: 16 Dic 2011, 19:50:30 »
[...]
secondo me ti preoccupi troppo del tuo obbiettivo... prima devi praticamente seguire passo passo lo sviluppo di com_hello, facendolo anche tu, e cercando di capire quel che fai, perchè è spiegato e quel tutorial serve proprio a questo.

Inoltre, se il tuo problema è a monte ed è lo sviluppo a oggetti ..anche questo è uno studio da fare
Mah..probabilmente hai ragione e dovrei ripassarmi di nuovo il com di esempio, forse la parte relativa alla toolbar e i vari bottoni add/edit/delete lato admin può essermi d'aiuto. Di sicuro il problema non è legato alla OOP, però sta cosa del link mi sta facendo diventare pazzo, devo assolutamente capire dove sbaglio.

mau_develop

  • Visitatore
Re:[J1.7] Nuovo componente e comprensione task/controller
« Risposta #11 il: 16 Dic 2011, 20:21:32 »
...ma cosa? il bottone che perde il focus? quello prova del com_hello?

M.

Offline coldj

  • Nuovo arrivato
  • *
  • Post: 10
    • Mostra profilo
Re:[J1.7] Nuovo componente e comprensione task/controller
« Risposta #12 il: 16 Dic 2011, 20:33:05 »
Già proprio quello, ho sta pippa mentale..che ci posso fare?! E me la trascino da un po anche..giusto per non annoiarmi.

mau_develop

  • Visitatore
Re:[J1.7] Nuovo componente e comprensione task/controller
« Risposta #13 il: 16 Dic 2011, 20:44:55 »
perchè quel componente è in home?

guarda che differenza c'è tra i link che compone joomla appoggiandosi sui pulsanti che chiamano componenti e quello che appare sul tuo... così non lo vedi perchè è come se fosse l'homepage .. o almeno mi pare... scusa ma sto cuocendo un orata e sono un po' distratto :)

M.

Offline coldj

  • Nuovo arrivato
  • *
  • Post: 10
    • Mostra profilo
Re:[J1.7] Nuovo componente e comprensione task/controller
« Risposta #14 il: 16 Dic 2011, 23:16:56 »
L'ho modificato di nuovo e dovrei aver corretto alcune cose, ora i link mi sembrano a posto e in linea con quelli di joomla che richiamano altri componenti, risultato, il focus sul menu viene perso come prima. Le variabili utilizzate mi sembrano più che corrette anche con le regole di joomla..il mistero continua. Ma possibile che questo problema ce l'abbia solo io? Mumble..mumble..

Offline coldj

  • Nuovo arrivato
  • *
  • Post: 10
    • Mostra profilo
Re:[J1.7] Nuovo componente e comprensione task/controller
« Risposta #15 il: 17 Dic 2011, 00:49:54 »
Sono un imbecille.
Ho capito il problema, perdeva il focus perchè nell'URL dei link non era presente la variabile "Itemid" relativo alla voce di menu. Ci ho messo 3 giorni per capirlo ma ora posso ritenermi soddisfatto..e anche un po preoccupato per la mia saluta mentale.
Bene..andiamo avanti.
Grazie dell'aiuto.

mau_develop

  • Visitatore
Re:[J1.7] Nuovo componente e comprensione task/controller
« Risposta #16 il: 17 Dic 2011, 09:53:17 »
:) ...non sei affatto un imbecille, anzi...

M.

 



Web Design Bolzano Kreatif