Reply to comment

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.

Reply

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.
  • You can enable syntax highlighting of source code with the following tags: [code], [blockcode]. PHP source code can also be enclosed in <?php ... ?> or <% ... %>.

More information about formatting options

Type the characters you see in this picture. (verify using audio)
Type the characters you see in the picture above; if you can't read them, submit the form and a new image will be generated. Not case sensitive.