Clonare un blocco di una vista
Salve signori, ho questo problema.
Ho un sito pieno di viste complesse, per ogni vista ho vari diplay, molto diversi tra loro.
Per guadagnare tempo, avrei la necessità di clonare dei diplay , ma quando esporto la vista o clono un blocco, in realtà clono la vista master.
Avrei biogno di una guida passo passo per arrivare allo scopo.
Leggendo qua e là ho visto che bisognerebbe sostituire il nome della master, ma non ho capito bene come fare.
C'è tra voi qualcuno che possa illuminarmi?
Risposte
Ciao, sì clonando ti porti
Ciao, sì clonando ti porti dietro anche il master che in realtà altro non è l'insieme dei valori di default della vista, per i quali ogni display può effettuare l'override.
Non so se ho interpretato bene la tua richiesta: l'idea mi pare di capire è ottenere l'inverso della funzione già presente "Ritorna al predefinito", cioè poter copiare i parametri sovrascritti dal display blocco (ad esempio) al master ... giusto?
Se è questo che ti serve c'è un post su drupal.org che credo faccia al caso tuo:
https://www.drupal.org/forum/support/post-installation/2014-08-01/copy-v...
in pratica usando il modulo devel e accedendo alla pagina /devel/php puoi eseguire lo snippet con un copia incolla.
Ho provato su una vista con una pagina (tutta al default) e un blocco (campi sovrascritti). Prima ha clonato la vista intera (perchè lo snippet modifica l'originale e non fa una copia) e poi ho eseguito (il nome macchina e quello del display li trovi nell'url quando sei in modifica del display voluto, nel mio caso http://d7.local:8080/admin/structure/views/view/ultime_notizie_clonate/edit/block_1):
<?php
$view = views_get_view('ultime_notizie_clonate');
$source_display = 'block_1';
foreach (array_keys($view->display[$source_display]->display_options['defaults']) as $key) {
if (!empty($view->display[$source_display]->display_options[$key])) {
$view->display['default']->display_options[$key] = $view->display[$source_display]->display_options[$key];
}
unset($view->display[$source_display]->display_options[$key]);
}
unset($view->display[$source_display]->display_options['defaults']);
$view->save();
?>
Una volta eseguito mi ritrovo con una vista il cui master gli stessi campi del display blocco (e ovviamente questo incide su tutte le altre visualizzazione non sovrascritte).
Spero di aver interpretato bene la tua richiesta ...
Ma con devel io non riesco ad
Ma con devel io non riesco ad arrivare a nessuna pagina deve/php , per caso serve un modulo aggiuntivo?
L'indirizzo corretto è
L'indirizzo corretto è http(s):/[dominio]/devel/php e la pagina è generata dal modulo devel, senza dover attivare altro. Controlla nel caso che l'utente con cui accedi (se non è l'utente 1) abbia i giusti permessi.
Grazie Maurizio, purtroppo
Grazie Maurizio,
purtroppo non mi funziona nemmeno dopo molti tentativi.
E' veramente frustrante, ma ho provato di tutto:
Ad eliminare tutti i dipslay inutili, a rinominare quello che vorrei fare diventare master, ma niente non lo fa.
E' una vista complessa dalla quale ne ho fatte altre complesse, rifarla da capo è veramente impegnativo.
Sembra che io sia l'unico al quale non funziona.
Sì immagino se la vista è
Sì immagino se la vista è complessa ci si mette un sacco di tempo .. vediamo un pò: personalizzando il codice di cui sopra rilevi errori oppure l'esecuzione va a buon fine ma non ci sono cambiamenti rilevabili sulla vista?
I cambiamenti ci sono ma non
I cambiamenti ci sono ma non sono così precisi, sembra che certe proprietà non presenti in nessu display attuale, siano comunque stati registrati nella master. A questo punto bisognerebbe abilitare un display master.. Ho rinunciato, e ho riscritto la view da zero.
Ti ringrazio moltissimo per l'aiuto e disponibilità.
Purtroppo anche quello sopra
Purtroppo anche quello sopra descritto è un workaround non è detto che funzioni in ogni possibile caso. Nella prova che ho fatto probabilmente la semplicità della vista e le scarse personalizzazioni hanno giocato a favore.
Alla prossima!