icon
Avatar
zod
Post: 217
Ciao, è da molto che non toccavo questa parte, ma rifacendo il mio sito con l'ultima release di Contao (3.5.12) mi sono accorto di un problema. Come mio solito tendo a manipolare molto i template standard.

La parte commenti delle news l'ho ricostruita con successo usando l'override per questi template:

1. mod_newsreader.html5 (che ho anche rinominato mod_newsdetail.html5)

Prepara l'intera pagina del dettaglio news quindi contiene
iconphp:
<?= $this->articles ?>

Poi c'è
iconphp:
<?= implode('', $this->comments) ?>
che si alimenta tramite il template al punto 2.
E anche
iconphp:
<?php include $this->getTemplate('mod_comment_form', 'html5'); ?>
che si alimenta tramite il template al punto 3.

2. com_default.html5

Questo semplicemente crea l'inserzione del commentatore, ed eventuale risposta da parte mia.

3. mod_comment_form.html5

Questo prepara il form, con tutti i campi necessari e utilizza la forma di questo tipo:
iconphp:
<?= $this->fields['name']->generateLabel() ?>
<?= $this->fields['name']->generateWithError() ?>

Anche se in un post ho scoperto essere obsoleta da Contao 3.3, ma Leo dice che la tiene così com'è. Ecco la risposta: https://github.com/contao/core/issues/7191

Quindi il problema mio è nello stilizzare i campi generati tramite questi codici, ho provato a eseguire un override senza successo di:

1. form_row.html5
2. form_widget.html5
3. form_textfield.html5
4. form_textarea.html5
5. form_checkbox.html5

Ho provato a metterli sia nella folder del mio tema, sia direttamente in folder "templates". Vengono inesorabilmente ignorati da Contao.

Ho provato anche a modificare i template di core, anche se non vorrei, cioè ad esempio: system\modules\core\templates\forms\form_textfield.html5

Niente, l'output di Contao è questo:
iconhtml4strict:
<input type="text" maxlength="64" required="" value="" class="text mandatory" id="ctrl_name" name="name">


Mentre io ho precisamente modificato il class affinché diventi
iconcss:
class="form-control"


Ovviamente ho pulito cache locale, e di Contao (tramite manutenzione).

Aggiunta: ho anche inserito in override il template ce_comments.html5 (non so nemmeno se viene usato, a rigor di logica no, perché la parte che contiene viene scritta da mod_newsreader.html5).
Ho controllato anche la php che genera il form, ma non capisco bene dove sta l'errore, sarebbe questa e inizia da riga 170: \system\modules\comments\classes\Comments.php

I textfield sono creati come normalmente fa Contao...

iconphp:
			'name' => array
			(
				'name'      => 'name',
				'label'     => $GLOBALS['TL_LANG']['MSC']['com_name'],
				'value'     => trim($this->User->firstname . ' ' . $this->User->lastname),
				'inputType' => 'text',
				'eval'      => array('mandatory'=>true, 'maxlength'=>64)
			),


Qualcuno sa per cortesia come vengono generati questi campi in form commenti :confused: ? Non sembra seguire alcuna logica prevedibile. Grazie
[L'ultima modifica di zod, 28/04/2016 12:21]
Marco Damian
www.zod.it
28/04/2016 12:02
Avatar
zod
Post: 217
Vittoria! :D

Rispondo per chi avesse lo stesso problema. Ho scoperto come fare leggendo un commento di Andreas nel forum tedesco. Parlavano di come inserire un placeholder, e ho applicato lo stesso principio di aggiunta al volo di attributi ai tag html, quindi aggiungendo il mio attributo in class.

Anche se sembra un hack, e non so ancora perché il form non usa i template in override, ho trasformato i campi da così:

iconphp:
 
<?= $this->fields['name']->generateLabel() ?>
<?= $this->fields['name']->generateWithError() ?>
 


a così:

iconphp:
 
<?= $this->fields['name']->generateLabel() ?>
<? $this->fields['name']->addAttributes(array('class' => 'form-control')); 
echo $this->fields['name']->generateWithError() ?>
 


Eventualmente, se si volesse usare la label come placeholder, bisogna prima rimuovere il contenuto negli span nascosti, e poi fare uno striptags (altrimenti si rompe l'html), e cioè fare:

iconphp:
 
<? $this->fields['name']->addAttributes(array('class' => 'form-control'));
$placeholder = preg_replace('#(<span.*?>).*?(</span>)#', '$1$2', $this->fields['name']->generateLabel());
$this->fields['name']->addAttributes(array('placeholder' => strip_tags($placeholder))); 
echo $this->fields['name']->generateWithError() ?>
 


Evvai con le manipolazioni :D
Marco Damian
www.zod.it
28/04/2016 14:13
icon