Joomla.it Forum
Componenti per Joomla! => Gestione Form => : giusebos 18 Apr 2015, 12:28:13
-
ciao mmleoni ho realizzato il tuo "esempio" con successo, prelevando il dato da una tabella dove ci sono questi campi:
razza_cane, nome_cane, anni_cane
quindi usando il campo nome_cane visualizzo tutti i nomi dei cani inseriti.
Vorrei che scegliendo il nome del cane, venissero stampati a video anche il campo razza_cane e anni_cane.
Mi è stato detto che occorre un po di js per popolare questi ulteriori campi, purtroppo nonostante le ricerche non riesco a trovare nessun codice di esempio.
Puoi darmi qualche indicazione?
Grazie
-
il topic di partenza è: http://forum.joomla.it/index.php?topic=246230.0
ho diviso perché è meglio non continuare un topic già chiuso con un risolto.
ciao giusebos,
in realtà non puoi, almeno con quel codice, perché le informazioni non sono nella pagina. poi usare la select per caricare i dati in una nuova pagina, puoi anche usare ajax se non vuoi ricaricare l'intera pagina. ... ma devi mandare la richiesta al server
se vuoi restare nella pagina devi rendere i dati disponibili per l'elaborazione (ad esempio un oggetto javascript), in modo da poterli visualizzare rapidamente.
quale delle due soluzioni scegliere dipende più che altro dalla quantità di dati presenti: se sono molti la prima è la scelta obbligata.
però è un pezzo che non faccio niente di complicato con CF :(
ciao
-
hai fatto benissimo a dividere il topic! Non mi accodo mai ma in questo caso ero incerto, forse si sarebbero aggiunte informazioni utili per proseguire l'esempio proposto.
I dati sono destinati a crescere sempre più, quindi la prima "strada" è quella da seguire.
la mia idea era quella di avere delle text box vuote che si popolavano alla scelta di un ID o un numero univoco come il codice fiscale, ma non so se questa è la soluzione giusta.
In pratica la logica dovrebbe essere quella che si usa nei gestionali, dove facendo la fattura si richiama il cliente, se è inserito, oppure si crea una nuova anagrafica se non è mai stato cliente. io pensavo solo di fare una cosa un poco più semplice.
-
spero molto più semplice!! ;D ;D
immagino che le informazioni da visualizzare siano molte più di anni e razza... stando in ajax puoi seguire due strade: fornire a js i dati con cui costruire la parte pagina o fornire la parte di pagina già compilata. il primo metodo è più professionale, il secondo più veloce e meno tecnico. io ti consiglierei il secondo.
da ciò che ricordo CF non ha il supporto per ajax e si doveva ricorrere ad una seconda form per la risposta alla interrogazione; funzionava così:
1a form: CF disegna la form e gestisce l'eventuale submit della form intera
nell' evento 'on load' usi 'load javascript' per caricare il js che gestisce ajax. il codice deve richiamare la seconda form (inserendo &tmpl=component nell'url per ovvi motivi)
2a form: contiene il custom code php che genera la risposta
nell'evento 'on submit' (mi pare) usi
- 'db read' per leggere i dati (usando il field 'conditions' per leggere il/i records opportuni)
- 'custom code' per inserire il php che genera la risposta e la stampa a video
io lo ho fatto un paio di volte e poi mi sono reso conto che era molto meglio scrivere un componente.
se hai dubbi chiedi, e se qualcuno è più ferrato di me su CF si senta libero di suggerire.
ciao
-
solo una cosa, chronoforms V5 ha il supporto ajax, nelle scheda degli eventi dei vari fields c'è un riquadro ajax che in diversi casi ho visto sempre riempire con la parola ajax....
Troppo semplice forse? ;D ;D
Purtroppo la versione CF5 è completamente diversa da quelle precedenti e ogni versione ha una logica troppo diversa da non poter ricreare vecchie "situazioni" create con le vecchie versioni, di cui si parlava in alcune vecchie discussioni di questo forum.
Sto scoprendo le cose molto lentamente e con grande difficoltà e anche in lingua inglese fuori dal forum del componente c'è davvero poco e questo poco è riferito a versioni precedenti alla 5.
Finirò il mio form a 70 anni :P :P
-
in effetti io, come sviluppo, sono rimasto alla 5.0.0 che di ajax ha decisamente poco, la 5.0.9, che ho su altro sito, introduce un sacco di iconcine con la scritta ajax... ma non chiedetemi a che servono.
per un ajax 'tradizionale':
http://forum.joomla.it/index.php/board,37.0.html
-
mi sono incuriosito: usare ajax con CF5 (almeno 5.0.9) è facilissimo...
in designer->layout ti fai la tua form e ci aggiungi
. un dropdown (id="DropdownSelection" e soprattutto nome="DropdownSelection")
. un container (id e nome="AjaxTarget")
in deginer->events inserisci "Dynamic html"
on "change value" of "DropdownSelection (la select)" target "AjaxTarget (il container )" ajax Event "ajaxEvent"
in setup, oltre al normale codice, crei un nuovo evento, nel nostro caso "ajaxEvent"
in 'on ajaxEvent' inserisci un 'custom code'
<?php echo json_encode("la tua scelta:" . $_GET['DropdownSelection']); ?>
quando cambi, la select appare il valore scelto nel container.
ho impiegato molto più a scrivere come farlo che a farlo...
ps: non usate $_GET per passare valori al sql.
-
piccola riflessione...
anche se CF5 dice "list should be returned in JSON format" secondo me json qui, nell'html dinamico, ci sta come i cavoli a merenda, suggerirei di rimuoverlo e restituire giusto lo html senza nessun encoding (salvo quello proprio dello html)
-
scusa non ho capito cosa otteniamo cosi...
-
nel container che type scegliamo...field?
-
container: div
in modo da poter essere inserito il contenuto restituito dall'event ajaxEvent
-
allora riprendiamo un poco il topic di origine e la tua richiesta.
nella tua tabella manca un id di riga, che ti consiglio di aggiungere per avere lo stesso comportamento del primo topic e perché e meglio passare numeri che non stringhe (encoding e varie altre considerazioni)
ti faccio un esempio sulla tabella #__users quindi fai quanto nell'altro topic ma usando 'name' al posto di 'title' come nome di campo
fermo restando quanto già detto per questo topic:
nell' ajaxEvent inserisci un db read:
- table name: #__users
- multi read: yes
- enable model id: yes
- model id: UserFiltered
- conditions: <?php return array('id' => (int)$_GET['DropdownSelection']); ?>
poi aggiungi un custom code
content:
<?php
foreach($form->data["UserFiltered"] as $user){
echo ("<p>");
echo ("name: " . $user["name"] );
echo ("email: " . $user["name"] );
echo ("</p>");
}
?>
quando selezioni un utente nella select, nel container appaiono nome ed email (il codice è fatto per supportare anche risultati multipli, che ovviamente non ci sono con un id)
io magari do molte cose per scontate, data la mia esperienza, ma ti assicuro è che tuto molto semplice.
ciao
-
ps: ovviamente $_GET con il type cast ad int non è proprio il massimo del coding joomla, ma non mi ricordavo la sintassi di jinput e quindi lascio a voi metterlo a posto.
-
Se il valore della GET è numerico int dovrebbe andare bene questo codice
JFactory::getApplication()->input->getInt('nome_della_GET', 0);
-
ho eseguito alla lettera, ma non mi funziona.
quando dici
poi aggiungi un custom code
content:
ho inserito un custom code in design,
mentre non ho capito bene cosa è la mia scelta
<?php echo json_encode("la tua scelta:" . $_GET['DropdownSelection']); ?>
-
sto riprovando da capo, quindi fino a vedere i nomi dentro la mia dropdown, di cui field name e fild ID si chiamano DropdownSelection,
funziona, vedo i nomi degli uenti, ma appena aggiungo in setup>>Db read>>condition
<?php return array('id' => (int)$_GET['DropdownSelection']); ?>
nel front-end vedo solo la select box vuota.
-
mi sa che stai inserendo la condizione nel 'db read' sbagliato: la condizione va sotto l'evento ajax, non sotto l'evento 'load'
-
dimenticavo: "la tua scelta" è il value della option della select che è tramesso alla selezione del valore tramite ajax all'evento ajaxjEvent
chiaro, no? ;D ;D
-
ci siamo quasi, sono andato avanti inserendo il container(div) AjaxTarget,
il dynamic HTML
in setup un On ajaxEvent con dentro
<?php return array('id' => (int)$_GET['DropdownSelection']); ?>
e in effetti scegliendo un nome nella select list in front-end per un attimo vedo l'iconcina di progressione che cerca qualcosa da caricare....., ma devo rimettere questo codice:
<?php
foreach($form->data["UserFiltered"] as $user){
echo ("<p>");
echo ("name: " . $user["name"] );
echo ("email: " . $user["name"] );
echo ("</p>");
}
?>
che non ho capito bene dove va...
-
per quelli a cui è venuto il mal di testa, facciamo così: scaricate ed installate la form (formato back up di CF5.0.9)
ricordate di:
- decompattate il file: lo zip serve solo per permettere l'upload sul forum
- sostituire i nomi delle tabelle nei due db reader (cf non supporta i prefissi di joomla per le tabelle)
buon divertimento
ps: ma perché non leggete il manuale? dite che non esiste proprio? e vi pare una buona ragione per non leggerlo? ;D ;D ;D ;D
---
edited: inserito file compattato, anziché con doppia estensione
-
il codice
<?php
foreach($form->data["UserFiltered"] as $user){
echo ("<p>");
echo ("name: " . $user["name"] );
echo ("email: " . $user["email"] ); /*opps, avevo scritto name due volte*/
echo ("</p>");
}
?>
va nell' ajaxEvent in un custom code dopo il db read (la condizione va nelle conditions del db read, invece).
-
fatto come dici tu, ma ha smesso di funzionare
grazie per il file.....forse è danneggiato, non si scompatta
-
non va scompattato, va solo tolta la estensione .zip
(in effetti non è stata una mossa geniale... :-[ )
-----
edited: ho inserito un file compattato con zip in modo da evitare disguidi ad altri utenti
-
edit
-
funziona perfettamente, io mi ero perso la parte di mettere un ulteriore db read dentro onajax event.
adesso quando si scegli l'utente, sotto appare
name: pino catozzoemail: pinocatozzo@gmail.com
Sicuramente questa discussione grazie a mmleoni :) :) aggiungerà ulteriore luce su chronoforms
-
Ciao a tutti,
scusate se riprendo una vecchia discusssione.
Ho seguito tutta le vostre indicazioni e sono riuscito ad adattare con successo un evento onajax che richiama i data da una tabella sul mio form. Volevo sapere se è possibile inviare il contenuto che viene fuori nel container tramite mail. Infatti quando faccio la prova di invio mail vengono inviati correttamente tutti i dati inseriti nel form tranne il campo container che rimane vuoto.
Grazie per l'aiuto.
-
la discussione è risolta, quindi cortesemente apri un nuovo post!