Views - Default display vs. Save
Amikor views-t adminisztrálok az életem egy kicsit hasonlít hasonlít a Törpök életéhez. Bonyolultabb nézetek szerkesztésénél amikor eljutok egy bizonyos pontig, amire azt mondom, hogy "na, ez eddig jó", és kattintok egyet a mentés gombra, azután fordulnak a dolgok egy kicsit rosszabbra.
Gyanútlanul tovább szerkesztem az aktuális display-t, ami már nem az, mint ami a mentés előtt volt, mert mentés után mindig a Default az aktuális és a további módosításaimmal elrontom azt is ami eddig jó volt. Persze egy idő után rájövök, hogy mi a helyzet, javítom a Default displayt, majd átváltok a tovább szerkesztendő display-re, elvégzem a kívánt módosításokat, de valamiért a Live preview nem azt mutatja mint amire számítok. "Hmmm, biztos nem jól állítottam be valamelyik szűrő feltételt". Újabb 5-10 perc után kiderül, hogy csak annyi a hiba, hogy az előnézethez tartozó display választó nem jól van beállítva.
Írtam egy kis JavaScript-et (jQuery) ami mentés után aktualizálja a mentés előtti display-t, és display váltás esetén automatikusan átállítja a Live preview-hoz tartozó display választót.
views_redisplay.info
; $Id$ name = Views Restore Display description = Activate the last edited display after save. package = Views core = 6.x dependencies[] = views_ui
views_redisplay.js
// $Id: views_redisplay.js,v 1.1.1.1 2009/04/22 18:42:47 sweetchuck Exp $ var viewsReDisplay = viewsReDisplay || {}; viewsReDisplay.setCookie = function() { $("div[@id^=views-tab-]").each(function(idx) { if ($(this).css('display') != 'none') { document.cookie = 'viewsReDisplayActiveTab='+$(this).attr('id')+"; path=/"; } }); return false; } viewsReDisplay.getPageFromTabId = function(tab) { return tab.match('-([^-]*)$')[1]; } viewsReDisplay.restoreDisplay = function() { var tab = viewsReDisplay.getStoredTabId(); var page = viewsReDisplay.getPageFromTabId(tab); $("div[@id^=views-tab-]").each(function(idx) { if ($(this).attr('id') == tab) { $(this).css('display', 'block'); } else { $(this).css('display', 'none'); } }); $("a[@id^=views-tab-title]", "ul#views-tabset").each(function(idx) { if ($(this).attr('id') == "views-tab-title-"+page) { $(this).parent().addClass('active'); } else { $(this).parent().removeClass('active'); } }) viewsReDisplay.setLivePreview(page); } viewsReDisplay.setLivePreview = function(page) { $("#preview-display-id", "form#views-ui-preview-form").val(page); } viewsReDisplay.tabChanged = function(e) { var page = viewsReDisplay.getPageFromTabId($(e).attr("id")); viewsReDisplay.setLivePreview(page); } viewsReDisplay.getStoredTabId = function() { var tab = viewsReDisplay.getCookie('viewsReDisplayActiveTab'); return $("div#"+tab).length ? tab : 'views-tab-default'; } viewsReDisplay.getCookie = function(cookie_name) { var result = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' ); return (result) ? (unescape(result[2])) : 'views-tab-default'; } $(document).ready( function() { viewsReDisplay.restoreDisplay(); $("#edit-save", "form#views-ui-edit-view-form").click( function() { viewsReDisplay.setCookie(); } ); $("a[@id^=views-tab-title]", "ul#views-tabset").click( function() { viewsReDisplay.tabChanged(this); } ); } );
views_redisplay.module
<?php // $Id: views_redisplay.module,v 1.1.1.1 2009/04/22 18:42:47 sweetchuck Exp $ /** * @file * views_redisplay.module */ /** * Implementation of hook_form_FORM_ID_alter(). */ function views_redisplay_form_views_ui_edit_view_form_alter(&$form, &$form_state) { drupal_add_js(drupal_get_path('module', 'views_redisplay') . '/views_redisplay.js'); }
JavaScript-ben sem vagyok valami nagy penge. Vannak hibái, de működik.
- Publikálás:

Comments
Contrib / peccs?
Engem is zavar a két probléma amiről írsz. Nem adod ki contrib modulként vagy Views patch-ként a javításokat?
Inkább patch
Külön modulnak egy kicsit durva lenne :-), lévén hogy a PHP érdemi része 1 sor, az is csak arra van, hogy a JS fájlt hozzáadja az űrlaphoz. Szerencsére nem csak én gondolom úgy, hogy ezt a problémát az alaprendszernek kéne megoldania, de fogalmam sincs, hogy mikor lesz időm ezt az issue-t egy patch-el megtámogatni.