Back to top

Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Post - ricctram

Pagine: [1] 2
1
Sviluppo / Re:Validazione lato server in nuovo componente
« il: 25 Gen 2014, 19:57:38 »
Io non so come ringraziarti, ho inserito il codice che mi hai inviato in questo modo è funziona tutto alla grande anche se non ho capito la motivazione:


Codice: [Seleziona]

if (!$form) {
return false;
} else {
if(isset($data['id']) && (int)$data['id'] > 0)
$form->setValue('id',null,(int)$data['id']);
return $form;
}

Grazie mille ;)

2
Sviluppo / Re:Validazione lato server in nuovo componente
« il: 24 Gen 2014, 19:35:57 »

dopo l'assegnazione e vedi i valori contenuti. già che ci sei stampati anche la query.

stampando la query questo è il risultato:


SELECT COUNT(*) FROM #__acc_partecipanti WHERE codice_fiscale = '12345678904' AND `id` <> 0

3
Sviluppo / Re:Validazione lato server in nuovo componente
« il: 24 Gen 2014, 19:14:03 »
@ricctram
se non hai un debugger inserisci un

print_r($form);die();

dopo l'assegnazione e vedi i valori contenuti. già che ci sei stampati anche la query.

ciao,
marco


grazie Marco


ho provato a fare quello che dici e il risultato è questo:
Codice: [Seleziona]
JForm Object ( [data:protected] => JRegistry Object ( [data:protected] => stdClass Object ( ) ) [errors:protected] => Array ( ) [name:protected] => com_accontratti.partecipante [options:protected] => Array ( [control] => jform ) [xml:protected] => JXMLElement Object ( [@attributes] => Array ( [addrulepath] => /administrator/components/com_accontratti/models/rules ) [fieldset] => JXMLElement Object ( [field] => Array ( [0] => JXMLElement Object ( [@attributes] => Array ( [name] => ragione_sociale [type] => text [label] => COM_ACCONTRATTI_RAGIONE_SOCIALE [class] => inputbox [required] => true ) ) [1] => JXMLElement Object ( [@attributes] => Array ( [name] => codice_fiscale [size] => 16 [type] => text [label] => COM_ACCONTRATTI_CODICE_FISCALE [class] => inputbox [validate] => codicefiscale [message] => COM_ACCONTRATTI_CODICE_FISCALE_ERRORE [message2] => COM_ACCONTRATTI_CODICE_FISCALE_ERRORE [required] => true ) ) [2] => JXMLElement Object ( [@attributes] => Array ( [name] => azienda_madre [type] => aziendamadre [label] => COM_ACCONTRATTI_AZIENDA_MADRE [class] => inputbox ) ) [3] => JXMLElement Object ( [@attributes] => Array ( [name] => id_fiscale_estero [type] => text [label] => COM_ACCONTRATTI_ID_FISCALE_ESTERO [class] => inputbox ) ) [4] => JXMLElement Object ( [@attributes] => Array ( [name] => ruolo [type] => text [label] => COM_ACCONTRATTI_RUOLO [class] => inputbox ) ) [5] => JXMLElement Object ( [@attributes] => Array ( [name] => id [type] => text [default] => 0 [readonly] => true [class] => readonly [label] => JGLOBAL_FIELD_ID_LABEL [description] => JGLOBAL_FIELD_ID_DESC ) ) ) ) ) )

4
Sviluppo / Re:Validazione lato server in nuovo componente
« il: 24 Gen 2014, 18:27:51 »
Ragazzi sto impazzendo, non funziona il metodo getValue() della classe JForm.


Codice: [Seleziona]

// Get the extra field check attribute.
$partId = ($form instanceof JForm) ? $form->getValue('id') : '';
$query->where($db->quoteName('id') . ' <> ' . (int) $partId);


Ho provato a sostituire a $form->getValue('id') un valore numerico di un id di un record già pesente nel db e mi fa correttamente modificare quel record, il che significa che $form è un istanza della classe JForm e che la condizione è soddisfatta, ma allora perchè non funziona il metodo getValue() della classe JForm???


Qualcuno può aiutarmi??

5
Sviluppo / Re:Validazione lato server in nuovo componente
« il: 24 Gen 2014, 17:33:45 »

... è possibile che non si chiami id o che sia annidato in altro


Se vedi l'html puoi vedere tu stesso che il campo si chiama id. Che intendi per essere annidato in altro?


Grazie

6
Sviluppo / Re:Validazione lato server in nuovo componente
« il: 24 Gen 2014, 17:17:06 »
Probabilmente hai un problema nel bind della form al momento della validazione, ma per questo problema diventa come cercare un ago nel pagliaio. Utilizzi le funzioni ereditate dalle classi del controller e del model oppure le hai riscritte tu?


Io non ho riscritto nessuna funzione, eredito quelle del controller e del model di default di joomla. Non ho toccato la funzione bind..

Come faccio a controllare se ho un problema nel bind della form?


Non riesco proprio a capire :(  Non riesco a modificare nessun record...

7
Sviluppo / Re:Validazione lato server in nuovo componente
« il: 23 Gen 2014, 22:09:45 »
Ho eliminato il campo con nome "id" dal file xml


Codice: [Seleziona]

<field
name="id"
type="hidden" />


perchè come puoi vedere dal file xml l'ho inserito erroneamente due volte. Comunque di seguito puoi vedere l'html del campo id che mi riporta correttamente un valore "1" che corrisponde effettivamente all'id del record. Quindi la cosa si infittisce... non so dove andare a parare


E' possibile che ho dimenticato di importare qualche libreria o qualcosa e quindi non riesce a recuperare il valore? E' possibile che il metodo getValue() oltre al nome del campo abbia bisogno di qualche altro parametro obbligatorio?








Codice: [Seleziona]
<li>
    <label id="jform_id-lbl" for="jform_id" class="hasTip" title="" aria-invalid="false">ID</label>
    <input type="text" name="jform[id]" id="jform_id" value="1" class="readonly" readonly="readonly" aria-invalid="false">
</li>

8
Sviluppo / Re:Validazione lato server in nuovo componente
« il: 23 Gen 2014, 20:10:40 »
Il problema è che non recupera il valore del campo 'id' attraverso $form->getValue('id'), ma non capisco perchè.


Grazie a tutti

9
Sviluppo / Re:Validazione lato server in nuovo componente
« il: 23 Gen 2014, 19:06:00 »
Grazie ancora Simone,


Ho inserito la stringa che dici tu e il messaggio alternativo funziona alla grande:


Codice: [Seleziona]


class JFormRuleCodicefiscale extends JFormRule
{
/*Controlla se il codice fiscale o la partita iva sono stati inseriti nel formato corretto*/
protected $regex = '^([0-9]{11})$|^([a-zA-Z]{6}[0-9]{2}[a-zA-Z]{1}[0-9]{2}[a-zA-Z]{1}[0-9]{3}[a-zA-Z]{1})$|^([a-zA-Z]{2}[0-9]{11})$';


/*Controlla che già non esista un record con la stessa partita iva o codice fiscale*/
public function test(&$element, $value, $group = null, &$input = null, &$form = null)
{
// Test the value against the regular expression.
if (!parent::test($element, $value, $group, $input, $form))
{
return false;
}

// Get the database object and a new query object.
$db = JFactory::getDBO();
$query = $db->getQuery(true);


// Build the query.
$query->select('COUNT(*)');
$query->from('#__acc_partecipanti');
$query->where('codice_fiscale = ' . $db->quote($value));

// Get the extra field check attribute.
$userId = ($form instanceof JForm) ? $form->getValue('id') : '';
$query->where($db->quoteName('id') . ' <> ' . (int) $userId);


// Set and query the database.
$db->setQuery($query);
$duplicate = (bool) $db->loadResult();


// Check for a database error.
if ($db->getErrorNum())
{
JError::raiseWarning(500, $db->getErrorMsg());
}


if ($duplicate)
{
$form->setFieldAttribute((string)$element['name'], 'message', (string)$element['message2']);
return false;
}


return true;
}
}
come vedi ho anche inserito


Codice: [Seleziona]

// Get the extra field check attribute.
$userId = ($form instanceof JForm) ? $form->getValue('id') : '';
$query->where($db->quoteName('id') . ' <> ' . (int) $userId);


perchè in effetti non mi permette di fare nessuna modifica in quanto vede che esiste un'altra partita iva uguale nel db, però nonostante abbia inserito questo codice continua ancora a darmi errore in fase di modifica.


ti posto anche il file xml del form, anche se non so se può aiutare:


Codice: [Seleziona]

<?xml version="1.0" encoding="UTF-8"?>
<form addrulepath="/administrator/components/com_accontratti/models/rules">
<fieldset>
<field
name="id"
type="hidden" />
<field
name="ragione_sociale"
type="text"
label="COM_ACCONTRATTI_RAGIONE_SOCIALE"
class="inputbox"
required="true" />
<field
name="codice_fiscale"
size="16"
type="text"
label="COM_ACCONTRATTI_CODICE_FISCALE"
class="inputbox"
validate="codicefiscale"
message="COM_ACCONTRATTI_CODICE_FISCALE_ERRORE"
message2="COM_ACCONTRATTI_CODICE_FISCALE_ESISTE_ERRORE"
required="true" />
<field
name="azienda_madre"
type="aziendamadre"
label="COM_ACCONTRATTI_AZIENDA_MADRE"
class="inputbox" />
<field
name="id_fiscale_estero"
type="text"
label="COM_ACCONTRATTI_ID_FISCALE_ESTERO"
class="inputbox" />
<field
name="ruolo"
type="text"
label="COM_ACCONTRATTI_RUOLO"
class="inputbox" />
<field
                        name="id"
type="text"
default="0"
readonly="true"
class="readonly"
label="JGLOBAL_FIELD_ID_LABEL"
description ="JGLOBAL_FIELD_ID_DESC" />
</fieldset>
</form>


So che è presente due volte il campo id, ma provando a togliere il primo in alto "hidden" il risulatato è sempre lo stesso..




Grazie ancora

10
Sviluppo / Re:Validazione lato server in nuovo componente
« il: 23 Gen 2014, 17:16:19 »
Simone ecco il codice che ho inserito. Funzionante!


Considera che il campo nel db si chiama "codice_fiscale" e all'interno è possibile inserire sia codice_fiscale che la partita iva.



Codice: [Seleziona]
class JFormRuleCodicefiscale extends JFormRule
{
protected $regex = '^([0-9]{11})$|^([a-zA-Z]{6}[0-9]{2}[a-zA-Z]{1}[0-9]{2}[a-zA-Z]{1}[0-9]{3}[a-zA-Z]{1})$|^([a-zA-Z]{2}[0-9]{11})$';


public function test(&$element, $value, $group = null, &$input = null, &$form = null)
{
// Test the value against the regular expression.
if (!parent::test($element, $value, $group, $input, $form))
{
return false;
}

// Get the database object and a new query object.
$db = JFactory::getDBO();
$query = $db->getQuery(true);


// Build the query.
$query->select('COUNT(*)');
$query->from('#__acc_partecipanti');
$query->where('codice_fiscale = ' . $db->quote($value));


// Set and query the database.
$db->setQuery($query);
$duplicate = (bool) $db->loadResult();


// Check for a database error.
if ($db->getErrorNum())
{
JError::raiseWarning(500, $db->getErrorMsg());
}


if ($duplicate)
{
return false;
}


return true;
}
}
Un'ultima cosa che vorrei chiedervi:
Quando da errore, sia per l'espressione regolare che non corrisponde, sia perchè già presente un codice fiscale o partita iva nel db, il messaggio è sempre lo stesso preso dall'attributo message="Messaggio di errore" nel file xml del form.


Posso restituire un messaggio di errore diverso in funzione dell'errore ?


Grazie

11
Sviluppo / Re:Validazione lato server in nuovo componente
« il: 23 Gen 2014, 11:25:47 »
in teoria lo puoi fare della rule che ti controlla la prtita iva, basta una semplice query facendo attenzione che la partita iva che stai controllando si stia riferendo ad un nuovo inserimento e non a una modifica.

Se guardi in libraries/joomla/form/rules è lo stesso principio della regola di validazione username


Ma io posso controllare la partita iva secondo espressione regolare e anche se è già presente all'interno del db?


Scusate .. il mio primo componente joomla :)




12
Sviluppo / Re:Validazione lato server in nuovo componente
« il: 21 Gen 2014, 20:03:52 »
Grazie ragazzi ci provo, spero di riuscirci..  :)

13
Sviluppo / Validazione lato server in nuovo componente
« il: 21 Gen 2014, 16:27:17 »
Salve ho un problema per quanto riguarda la validazione di alcuni campi in un nuovo componente.


Dunque l'amministratore del sito inserisce ragione sociale e partita iva, però nel momento in cui inserisce una partita iva già presente nel db vorrei che mi restituisse un messaggio di errore e che naturalmente non mi inserisse il record nel db.


Ho creato il file xml per la creazione del form e nel campo "partita iva" ho inserito l'attributo "validate=piva" poi ho creato la cartella "rules" dove all'interno ho inserito il file piva.php con la relativa espressione regolare. E fin qui tutto apposto, controlla correttamente se è una partita iva secondo l'espressione regolare.


Come faccio però ad effettuare un controllo sul db per vedere se esiste quella determinata partita iva e ritornare in caso eventuale errore ?


Grazie a tutti

14
Non riesco proprio a creare un campo personalizzato che mi prende l'utente e lo salvi nel campo created_by.. Qualcuno può aiutarmi?

15
Grazie mille

16
La data di creazione a mio parere è una data che verrà generata solo nel momento in cui effettui il primo salvataggio per cui dovrebbe essere gestita solo dal database. Nel mio componente ho fatto così: ho creato un timestamp del tipo

Codice: [Seleziona]
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP


In effetti credo che questa soluzione sarebbe la più veloce per il campo "created" dato che deve essere un valore di sola lettura. Per il campo user invece, per logica, dovrei creare un custom field che effettui un controllo dell'utente che ha appena inserito il record e scrivere l'id di riferimento nel campo "created_by".


Sapete qual'è il metodo per rilevare l'utente che ha inserito quel determinato record?


Grazie mille

17
Ciao
Per il campo created devi scegliere timestamp mentre per l'user devi prima inserire le istruzioni per leggere dal db chi è collegato.
Grazie per il consiglio. Comunque per il mio componente ho seguito le linee guida del componente com_content e il campo created è un campo datetime con valore di default 0000-00-00 00:00:00. Comunque ci provo e ti faccio sapere.



2.
se ti basta che sia inserito un valore nella tabella al salvataggio dei dati, puoi fare un override del metodo bind() nella classe che definisce la table. (e usare campi di tipo text)




Quindi questo secondo metodo è quello utilizzato dal componente com_content di joomla immagino giusto ?Poichè non trovo nessun custom field che riguarda il campo created e user nel componente nativo com_content.


Grazie ancora




18
Salve a tutti,


sto realizzando un componente per la versione 2.5 di Joomla e ho praticamente ultimato il lavoro se non fosse per un problema dal quale non riesco ad uscirne. Credo che sarà qualcosa di semplice ma non riesco proprio a capire cosa mi sfugge.


In pratica quando creo un nuovo record nel mio componente vorrei (come avviene nei componenti nativi di joomla) che venisse inserita la data di creazione e l'utente in maniera automatica, ma non capisco il motivo non me li inserisce automaticamente ma mi da soltanto la possibilità di inserirli manualmente.


Quello che ho fatto è inserire i campi specifici nel file item.xml nella cartella forms del model (vedi di seguito)


Codice: [Seleziona]
<field
name="created"
type="calendar"
label="COM_ACCONTRATTI_CREATO_LABEL"
description="COM_ACCONTRATTI_CREATO_DESC"
class="readonly"
size="22"
readonly="true"
format="%Y-%m-%d %H:%M:%S"
filter="user_utc" />


<field
name="created_by"
type="user"
readonly="true"
class="readonly"
label="Creato da"
/>


<field
name="modified"
type="calendar"
class="readonly"
label="JGLOBAL_FIELD_MODIFIED_LABEL"
size="22"
readonly="true"
format="%Y-%m-%d %H:%M:%S"
filter="user_utc" />


<field
name="modified_by"
type="user"
label="JGLOBAL_FIELD_MODIFIED_BY_LABEL"
class="readonly"
readonly="true"
filter="unset" />


ho inserito il seguente codice nel file del template edit.php all'interno della cartella tmpl:


Codice: [Seleziona]
<fieldset class="panelform">
<ul class="adminformlist">
<? foreach ($this->form->getFieldset('publish') as $field) { ?>
<li><?=$field->label?><?=$field->input?></li>
<? } ?>
</ul>
</fieldset>
dopo di che ho creato gli appositi campi nella tabella del database.


Mi visualizza correttamente i campi e se provo ad inserire un valore manualmente, quindi togliendo l'attributo "readonly", mi inserisce correttamente i valori nel database.


Il problema è che non capisco come fare ad evitare di inserire i valori manualmente ma vorrei che fosse il componente stesso ad inserire il valore (es. la data di creazione) in automatico come avviene ad esempio nel componente com_content per gli articoli.


Qualcuno può aiutarmi?


Grazie

19
Ciao E grazie per la risposta... Non appena fatto l'aggiornamento ho svuotato la cache nell'area database e poi ho cliccato su correggi. L'operazione e andata a buon fine. Non capisco...

20
Salve


Ho effettuato un aggiornamento di joomla dalla versione 1.7 alla versione 2.5.6 in modalità automatica e sembrava funzionare tutto bene quando invece mi sono accorto che in tutti i link nell'area di amministrazione il carattere & viene convertito con &amp; nell'url e quindi non mi permette di accedere nelle relative pagine per effettuare le modifiche.


Ho provato a visionare i file della lista articoli e l'url è scritto correttamente con il carattere & e anche controllando i vari link con "Ispeziona elemento" di Chrome ho notato che i link sono apposto, ma quando ci clicco sopra in un primo momento nell'url compaiono nella forma corretta ma immediatamente cambiano trasformando tutti gli & in &amp; e quindi non consentendomi di entrare nella pagina che voglio modificare.


C'è qualcuno che può indicarmi la soluzione a questo problema?


Grazie

Pagine: [1] 2


Web Design Bolzano Kreatif