Drupal 7 और Views 3 का उपयोग करते समय, किसी व्यू फ़िल्टर मान को बदलने का सही तरीका क्या है जिससे यह उस सामग्री को प्रभावित करता है जो अभी प्रस्तुत की जाने वाली है?
मैंने डी 6 के लिए यहां बताई गई हर चीज को आजमाया ।
भले ही कुछ लोगों को यह काम करने के लिए मिला हो, लेकिन मर्लिन ने कहा कि डिस्प्ले_ऑप्टिशन को संशोधित करना इसे प्राप्त करने का गलत तरीका है, लेकिन वह अपनी प्रतिक्रिया में अस्पष्ट है कि क्या करना है ( http://drupal.org/node/789710#comment) 2927556 ) है।
मैंने कोशिश की है:
function pages_views_pre_view($view){
$view = views_get_view('north_carolina');
$view->set_display('default');
$view->display_handler->options['filters']['province']['value'] = 'Georgia';
dsm($view->display_handler->options['filters']['province']);
}
टिप्पणियाँ:
1) मेरे पास एक दृश्य है जिसे कहा जाता north_carolina
है जिसमें दो प्रकार के डिस्प्ले होते हैं - एक पृष्ठ और एक ब्लॉक (पेज_1 और ब्लॉक_1)।
2) मेरे फ़िल्टर मेरे डिस्प्ले में समान हैं इसलिए मैं 'डिफ़ॉल्ट' डिस्प्ले को बदलने की कोशिश कर रहा हूं ताकि यह उन सभी को प्रभावित करे।
3) मेरे फ़िल्टर का डिफ़ॉल्ट मान 'नॉर्थ कैरोलिना' है (जिसे मैंने व्यू यूआई में सेट किया है) लेकिन ध्यान दें कि मैं इसे 'जॉर्जिया' में बदलने की कोशिश कर रहा हूं
4) अगर मैं तुरंत बाद DSM चलाता हूं, तो मैं देखता हूं कि फ़िल्टर बदल दिया गया है, हालांकि, मेरे परिणाम अभी भी 'नॉर्थ कैरोलिना' के परिणाम दिखाते हैं। कैशिंग बंद कर दिया जाता है, और मैं अभी भी सभी ड्रंक सीसी चलाने के बाद एक ही बात करता हूं।
मैंने भी उसी कोड को चलाने की कोशिश की है hook_views_pre_build
और hook_views_pre_execute
।
कोई सुझाव?
संपादित करें:
जैसा कि सुझाव दिया गया है कि इससे अतिरिक्त जानकारी प्राप्त करने में मदद मिल सकती है। यहाँ दृश्य का एक डंप है:
$view = new view();
$view->name = 'north_carolina';
$view->description = '';
$view->tag = 'default';
$view->base_table = 'node';
$view->human_name = 'North Carolina';
$view->core = 7;
$view->api_version = '3.0';
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
/* Display: Master */
$handler = $view->new_display('default', 'Master', 'default');
$handler->display->display_options['title'] = 'test nc block';
$handler->display->display_options['use_more_always'] = FALSE;
$handler->display->display_options['access']['type'] = 'perm';
$handler->display->display_options['cache']['type'] = 'none';
$handler->display->display_options['query']['type'] = 'views_query';
$handler->display->display_options['exposed_form']['type'] = 'basic';
$handler->display->display_options['pager']['type'] = 'full';
$handler->display->display_options['style_plugin'] = 'default';
$handler->display->display_options['row_plugin'] = 'fields';
/* Field: Content: Title */
$handler->display->display_options['fields']['title']['id'] = 'title';
$handler->display->display_options['fields']['title']['table'] = 'node';
$handler->display->display_options['fields']['title']['field'] = 'title';
$handler->display->display_options['fields']['title']['label'] = '';
$handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE;
$handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE;
/* Sort criterion: Content: Post date */
$handler->display->display_options['sorts']['created']['id'] = 'created';
$handler->display->display_options['sorts']['created']['table'] = 'node';
$handler->display->display_options['sorts']['created']['field'] = 'created';
$handler->display->display_options['sorts']['created']['order'] = 'DESC';
/* Filter criterion: Content: Published */
$handler->display->display_options['filters']['status']['id'] = 'status';
$handler->display->display_options['filters']['status']['table'] = 'node';
$handler->display->display_options['filters']['status']['field'] = 'status';
$handler->display->display_options['filters']['status']['value'] = 1;
$handler->display->display_options['filters']['status']['group'] = 1;
$handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
/* Filter criterion: Location: Province */
$handler->display->display_options['filters']['province']['id'] = 'province';
$handler->display->display_options['filters']['province']['table'] = 'location';
$handler->display->display_options['filters']['province']['field'] = 'province';
$handler->display->display_options['filters']['province']['value'] = 'North Carolina';
$handler->display->display_options['filters']['province']['exposed'] = TRUE;
$handler->display->display_options['filters']['province']['expose']['operator_id'] = 'province_op';
$handler->display->display_options['filters']['province']['expose']['label'] = 'State';
$handler->display->display_options['filters']['province']['expose']['operator'] = 'province_op';
$handler->display->display_options['filters']['province']['expose']['identifier'] = 'province';
$handler->display->display_options['filters']['province']['expose']['remember_roles'] = array(
2 => '2',
1 => 0,
3 => 0,
4 => 0,
);
/* Display: Block */
$handler = $view->new_display('block', 'Block', 'block_1');
$handler->display->display_options['block_description'] = 'test nc block';
ध्यान दें कि ये हैंडलर लोकेशन मॉड्यूल द्वारा प्रदान किए गए हैं। विशेष रूप से "स्थान: प्रांत" फ़िल्टर के लिए मुझे एक ऑटो पूर्ण रूप दिया जाता है। जब मैं उत्तरी कैरोलिना में टाइप करता हूं, तो यह पॉप अप हो जाता है, और मुझे यह चुनना पड़ता है। हालाँकि, SQL कथन में जो दृश्य उत्पन्न करता है वह राज्य के लिए दो वर्ण संक्षिप्त नाम का उपयोग करता है:
SELECT node.title AS node_title, node.nid AS nid, node.created AS node_created
FROM
{node} node
LEFT JOIN {location_instance} location_instance ON node.vid = location_instance.vid
LEFT JOIN {location} location ON location_instance.lid = location.lid
WHERE (( (node.status = '1') AND (location.province = 'NC') ))
ORDER BY node_created DESC
LIMIT 10 OFFSET 0