Back to top

Autore Topic: [Risolto] Ricavare modulo da una specifica vista componente.  (Letto 3523 volte)

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Salve

Ancora alle prese col rifacimento di un sito, visto che mi trovo con le mani in pasta, anzi, nel codice ho deciso, finalmente, di automatizzare l'inserimento dei dettagli degli eventi nella home dove tuttora li inserisco manualmente. Senza grande difficoltà ho aggiunto un task al componente duplicando quello del dettaglio, poi mi sono replicato la vista default modificandone l'html in modo da ottenere lo stesso risultato che immettevo manualmente.
http://www.mariangelavacatello.com/New home col dettaglio corrente immesso a mano.
http://www.mariangelavacatello.com/New/la-musica/concerti?task=prossimo dettaglio automatico (poi da spostare)

Però sorge un però cioè la vista così non mi va bene perché a parte che le news compaiono in due posizioni diverse ed accompagnate anche da altri contenuti che ogni tanto cambiano, sarebbe meglio ricavarne un modulo.

Come trasformare un task in modulo? Qualcuno mi suggerisce dove posso trovare spunto e documentazione?

Come al solito Grazie a tutti.
« Ultima modifica: 25 Lug 2015, 22:18:30 da tomtomeight »

Offline steganoga

  • Abituale
  • ****
  • Post: 1313
    • Mostra profilo
Re:Ricavare modulo da una specifica vista componente.
« Risposta #1 il: 21 Lug 2015, 18:17:54 »
..nì, ovvero se la task non fa alltro che restituire alla vista dei valori provenienti da una query o comunque da uno script ... sì, usi l'helper per fare la query ed è quello che fa un normale modulo.

se il modulo prevede variabili esterne prese da request allora direi che il modulo non è l'estensione corretta

dove trovi un tutorial... boh lo si può fare anche quì direi che è semplice, nel primo caso
...sono dove non ti aspetti di trovarmi, mi alimento della tua supponenza e disseto la mia curiosità nel silenzio.
Non sono un nemico, considerami un ospite.

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:Ricavare modulo da una specifica vista componente.
« Risposta #2 il: 21 Lug 2015, 19:03:42 »
In effetti è una query su una unica tabella ove preleva i dai correnti in base alla data. Quindi come dici indipendentemente dal componente posso costruirmi il modulo allo stesso modo.
Pensavo di dover in qualche modo interagire col componente per prelevare i dati, ci provo.

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:Ricavare modulo da una specifica vista componente.
« Risposta #3 il: 25 Lug 2015, 10:39:07 »
Mi sono arenato ad un punto ove non riesco ad andare avanti, descrivo dove mi sono fermato.
Ho scritto il mio helper ove specifico la connessione al db e relativa query per estrarre i dati che mi interessa mostrare, la query mi rende una variabile $res adesso non capisco dove devo estrarre i campi di questa variabile, se nel default o sempre nell'helper. Nel default ci provo replicando come da view del componente ma ottengo errori, nel helper non trovo esempi di come implementarla.

Grazie.

Offline steganoga

  • Abituale
  • ****
  • Post: 1313
    • Mostra profilo
Re:Ricavare modulo da una specifica vista componente.
« Risposta #4 il: 25 Lug 2015, 15:08:39 »
in buona sostanza un modulo può essere tranquillamente un solo file, l'entry point
mod_miomodulo avrebbe come entry point miomodulo.php, dove potresti fare tutto, html compreso, ...però joomla è mvc..

Quindi per tenere separato il codice si usa un miomodulo.xml che serve a contenere eventuali parametri e serve a Joomla per installarlo, l'entry point miomodulo.php, che svolgerà un compito simile a quello del controller in un componente ovvero, metterà insieme i dati processati con la vista.

Per comodità gli script stanno nell'helper che contiene classi statiche che vengono caricate nell'entry point.

Riassumendo, un esempio di entry point potrebbe essere:
Codice: [Seleziona]
// impedisce la chiamata diretta al file
defined('_JEXEC') or die;

// include i metodi statici dell'helper
require_once __DIR__ . '/helper.php';

// se ho campi parametri nell'xml li carico
$eventuale_parametro = $params->get('nome_parametro');

// uso metodo dell'helper
$dati = ModMiomoduloHelper::miafunzione();

// li passo alla vista/template
require JModuleHelper::getLayoutPath('mod_miomodulo', $params->get('layout', 'default'));
// il secondo valore è il layout che puoi avere impostato nei parametri come in qs caso, o puoi scriverlo direttamente


nel default.php della vista puoi usare la variabile $dati i dati li estrarrai in modo diverso a seconda contenga elementi di un oggetto piuttosto che elementi di array o una singola variabile
...sono dove non ti aspetti di trovarmi, mi alimento della tua supponenza e disseto la mia curiosità nel silenzio.
Non sono un nemico, considerami un ospite.

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:Ricavare modulo da una specifica vista componente.
« Risposta #5 il: 25 Lug 2015, 19:03:35 »
Questo il mio file helper

Codice: [Seleziona]
<?php
defined
('_JEXEC') or die('Restricted access');

class 
ModEventiHelper
{
   
    public static function 
getEventi($params)
    {
    // Obtain a database connection
    $db JFactory::getDbo();
// Retrieve the shout
$query 'SELECT * FROM #__fabrik_calendar_events WHERE start_date > now() - INTERVAL 1 DAY ORDER BY start_date asc';
            
$db->setQuery($query);
if( $res $db->loadAssocList() ){
return $res;
}
return false;
        
    }
    
}

e questo il tmpl/default.php

Codice: [Seleziona]
<?php
defined
('_JEXEC') or die('Restricted access');

?>

<div id="prossima_news">

<div id="prossimo">
<?php
if(empty($evento_single)){ $evento_single $this->data[0]; }
                
?>

<p>Cari amici il mio prossimo concerto si terr&agrave; il <?php echo date ("d/m/Y"strtotime($evento_single['start_date']));?>&nbsp;<?php echo $evento_single['hour']; ?>&nbsp;presso:&nbsp;"<?php echo $evento_single['address']; ?>"&nbsp;a&nbsp;<?php echo $evento_single['venue']; ?>&nbsp;<?php echo $evento_single['provincia']; ?>.&nbsp; Vi aspetto!</p>

   
</div>

</div>


e questo l'errore che ottengo alla pubblicazione del modulo

Codice: [Seleziona]
Fatal error: Using $this when not in object context in /var/www/vhosts/mariangelavacatello.com/httpdocs/web/New/modules/mod_eventi/tmpl/default.php on line 30
La stessa vista nel componente funziona ma non riesco a capire ove è ricavataa la variabile &evento_single

Offline steganoga

  • Abituale
  • ****
  • Post: 1313
    • Mostra profilo
Re:Ricavare modulo da una specifica vista componente.
« Risposta #6 il: 25 Lug 2015, 19:15:28 »
dà errore perchè la credi in un oggetto $this...

se nell'entry point hai fatto qualcosa tipo:

$data =  ModTuomoduloHelper::tuafunzione();

$data è l'oggetto che contiene gli elementi.

nel default prova a mettere un print_r($data); ... sempre si chiami data la tua var
...sono dove non ti aspetti di trovarmi, mi alimento della tua supponenza e disseto la mia curiosità nel silenzio.
Non sono un nemico, considerami un ospite.

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:Ricavare modulo da una specifica vista componente.
« Risposta #7 il: 25 Lug 2015, 19:29:24 »
Questo il file mod_eventi.php

Codice: [Seleziona]
<?php
defined
('_JEXEC') or die;
// Include the syndicate functions only once
require_once dirname(__FILE__) . '/helper.php';
 
$eventi modEventiHelper::getEventi($params);
$data modeventiHelper::getEventi();
require 
JModuleHelper::getLayoutPath('mod_eventi');

se metto il print_r($data);  mi restituisce tutti gli eventi dopo la data corrente a me serve solo il prossimo, e comunque me li mette tutti di seguito, come faccio a prendermi solo i campi che mi servono?

Offline steganoga

  • Abituale
  • ****
  • Post: 1313
    • Mostra profilo
Re:Ricavare modulo da una specifica vista componente.
« Risposta #8 il: 25 Lug 2015, 19:38:19 »
$eventi = modEventiHelper::getEventi($params);
$data = modeventiHelper::getEventi();
----------------
...sono la stessa cosa

mi restituisce tutti gli eventi dopo la data corrente
------------------
non sarà corretta la query...


incolla un pezzetto di quel print
...sono dove non ti aspetti di trovarmi, mi alimento della tua supponenza e disseto la mia curiosità nel silenzio.
Non sono un nemico, considerami un ospite.

Offline steganoga

  • Abituale
  • ****
  • Post: 1313
    • Mostra profilo
Re:Ricavare modulo da una specifica vista componente.
« Risposta #9 il: 25 Lug 2015, 20:49:40 »
se ti serve solo il prossimo evento invece di incasinarti con le date puoi usare solo il > now e limitare ad un risultato con LIMIT 1

per i dati della query io preferisco usare un loadObjectList ma caricando solo una riga credo tu possa usare semplicemente loadObject
« Ultima modifica: 25 Lug 2015, 20:51:26 da steganoga »
...sono dove non ti aspetti di trovarmi, mi alimento della tua supponenza e disseto la mia curiosità nel silenzio.
Non sono un nemico, considerami un ospite.

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:Ricavare modulo da una specifica vista componente.
« Risposta #10 il: 25 Lug 2015, 21:28:29 »
Codice: [Seleziona]
Warning: Missing argument 1 for ModEventiHelper::getEventi(), called in /var/www/vhosts/mariangelavacatello.com/httpdocs/web/New/modules/mod_eventi/mod_eventi.php on line 28 and defined in /var/www/vhosts/mariangelavacatello.com/httpdocs/web/New/modules/mod_eventi/helper.php on line 34

Array ( [0] => Array ( [id] => 157 [hour] => 9:15pm [start_date] => 2015-07-26 [autor_1] => [venue] => Pieve a Elici [address] => Chiesa Romanica di San Pantaleone [tipo] => Recital [autor_2] => [autor_3] => [autor_4] => [autor_5] => [autor_6] => [provincia] => [Lucca, Italy] ) [1] => Array ( [id] => 154 [hour] => 9pm [start_date] => 2015-08-16 [autor_1] => Kawai a Ledro [venue] => Ledro [address] => Centro Culturale di Locca [tipo] => Recital [autor_2] => Chopin [autor_3] => [autor_4] => [autor_5] => [autor_6] => [provincia] => [Tn, Italy] ) [2] => Array ( [id] => 159 [hour] => [start_date] => 2015-08-25 [autor_1] => Piano Masterclass 25-27 August [venue] => Vecchiano [address] => [tipo] => Masterclass [autor_2] => http://accademiaharmonia.it [autor_3] => [autor_4] => [autor_5] => [autor_6] => [provincia] => [Pisa, Italy] )

Questo un pezzetto del print. eppure la stessa query nel componente mi elenca solo il prossimo evento, come ho scritto all'inizio.

http://www.mariangelavacatello.com/New/la-musica/concerti?task=prossimo

Offline steganoga

  • Abituale
  • ****
  • Post: 1313
    • Mostra profilo
Re:Ricavare modulo da una specifica vista componente.
« Risposta #11 il: 25 Lug 2015, 21:47:24 »
no, non si può comportare diversamente, probabilmente tratterai il risultato estraendo (come tentavi di fare sopra) solo il primo elemento dell'array. ma è inutile e conviene limitarla al primo risultato... comunque sia ti dice:

Missing argument 1 for ModEventiHelper::getEventi()

beh ovvio, quando dichiarato hai messo $params ... serve nel caso usi nella tua funzione i parametri che ti ho fatto vedere prima come si recuperano, basta metterglielo getEventi($params) o se non li usi toglierlo in entrambe

poi il risultato ... se ordini i dati:

Array (
  • => Array (
[id] => 157 [hour] => 9:15pm [start_date] => 2015-07-26 [autor_1] =>

           [1] => Array (
 [id] => 154 [hour] => 9pm [start_date] => 2015-08-16 [autor_1] =>

vedi che sono array bidimensionali quindi

 $data li contiene tutti

$data[0] contiene quelli del primo elemento, che si estrarranno:

$id = $data[0]['id'];
$hour = $data[0]['hour'];

ma è più elegante come dicevo poco sopra...
...sono dove non ti aspetti di trovarmi, mi alimento della tua supponenza e disseto la mia curiosità nel silenzio.
Non sono un nemico, considerami un ospite.

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:Ricavare modulo da una specifica vista componente.
« Risposta #12 il: 25 Lug 2015, 21:53:00 »
Ok grazie, metterò il limite per il primo risultato, i parametri li ho messi per utilizzarli successivamente per poter eventualmente modificare i testi fra le variabili direttamente dal modulo in amministrazione.
Forse non ti ricordi ma il componente è nato dal tuo prezioso aiuto all'epoca.

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:Ricavare modulo da una specifica vista componente.
« Risposta #13 il: 25 Lug 2015, 22:17:59 »
Funziona, bene adesso aggiusto il css, ed implemento i parametri. grazie.

 



Web Design Bolzano Kreatif