कुछ दृश्यों के प्रदर्शन के मुद्दों और सर्वोत्तम प्रथाओं का सम्मान करने के लिए, मैं कुछ ऐसे दृश्यों को बदलना चाहूंगा जिन्हें मैंने कुछ समय पहले अपने स्वयं के कस्टम हैंडलर द्वारा कॉन्फ़िगर किया था ।
उदाहरण के लिए, मुझे एक दृश्य PHP फ़ील्ड मिला है , जो उस सेटअप के साथ प्रदर्शन से बाहर रखा गया है :
मूल्य कोड:
if( $row->sticky ==1 ) {
return 100;
} else {
if ( isset($row->product_id) && $row->product_id != "" ){
$query = "SELECT COUNT(statut.entity_id) FROM field_data_field_statut_depart statut"
. " INNER JOIN field_data_field_product product ON statut.entity_id= product.field_product_product_id"
. " INNER JOIN field_data_field_date_depart depart ON statut.entity_id = depart.entity_id"
. " WHERE product.entity_id = ". $row->nid." AND field_statut_depart_value IN (2,3) AND field_date_depart_value > NOW(); ";
$select = db_query($query);
$count = $select->fetchField();
return $count;
}
else {
return -1;
}
}
आउटपुट कोड :
<?php print $value ; ?>`
फिर मैं उस क्षेत्र को पहले प्रकार के मानदंड ( आरोही ) के रूप में उपयोग करता हूं , ग्लोबल PHP सॉर्ट मानदंड में:
if ($row1->php> $row2->php) return -1; else return 1;
यदि आप मुझे सही तरीके से लगा सकते हैं, तो मैं वास्तव में शुक्रगुज़ार होऊंगा: डेटाबेस में PHP के साथ समाप्त करने के लिए मैं उसी फ़ंक्शन को किस फ़ंक्शन में बनाऊंगा?
सारांश :
खोज और प्रगति के बाद, प्लस @ रेनरह मदद, अधिकांश कार्यान्वयन ठीक लगता है, नीचे विस्तृत है। लेकिन मैं अभी भी एक बिंदु के साथ लड़ रहा हूं : मैंने मूल्य की गणना करने के लिए एक कस्टम फ़ील्ड हैंडलर जोड़ा, लेकिन मैं उस हैंडलर द्वारा कैसे ऑर्डर कर सकता हूं?
संपादन:
मैंने अब तक क्या किया:
.info फ़ाइल
files[] = views_handler_vts_products_sort.inc
files[] = includes/views_handler_vts_count_depconf_field.inc
मॉड्यूल फ़ाइल
/**
* Implements hook_views_data().
*/
function vts_views_handler_views_data() {
$data['custom']['table']['group'] = t('Custom');
$data['custom']['table']['join'] = array(
// #global is a special flag which let's a table appear all the time.
'#global' => array(),
);
$data['custom']['custom_handler'] = array(
'title' => t('Vts custom Sort Handler'),
'help' => 'Sorts products by sticky first then by custom statut field',
'sort' => array(
'handler' => 'views_handler_vts_products_sort',
),
);
$data['custom']['count_depconf_field'] = array(
'title' => t('Sum of products with status confirmed '),
'help' => t('Calculate Sum of products with status confirmed, to order lists".'),
'field' => array(
'handler' => 'views_handler_vts_count_depconf_field',
'click sortable'=> TRUE,
),
/*'sort' => array(
'handler' => 'views_handler_sort',
), */
);
return $data;
}
function vts_views_handler_views_api() {
return array(
'api' => 3,
'path' => drupal_get_path('module', 'vts_views_handler'),
);
}
views_handler_vts_products_sort
फ़ाइल
/**
* Base sort handler that has no options and performs a simple sort.
*
* @ingroup views_sort_handlers
*/
class views_handler_vts_products_sort extends views_handler_sort {
function query() {
$this->ensure_my_table();
// Add the field.
$this->query->add_orderby('node', 'sticky', 'DESC');
}
}
views_handler_vts_count_depconf_field
फ़ाइल
/*
* A simple field to calculate the value I wish to order by.
*/
class views_handler_vts_count_depconf_field extends views_handler_field {
function query() {
//do nothing
}
function render($values) {
$count = 0;
$product_id = isset($values-> commerce_product_field_data_field_product_product_id)? $values-> commerce_product_field_data_field_product_product_id: NULL;
if(!is_null($product_id)){
$query = "SELECT COUNT(statut.entity_id) FROM field_data_field_statut_depart statut"
. " INNER JOIN field_data_field_product product ON statut.entity_id= product.field_product_product_id"
. " INNER JOIN field_data_field_date_depart depart ON statut.entity_id = depart.entity_id"
. " WHERE product.entity_id = " . $values->nid . " AND field_statut_depart_value IN (2,3) AND field_date_depart_value > NOW(); ";
$select = db_query($query);
$count = $select->fetchField();
}
return $count;
}
}
शेष प्रश्न:
कस्टम फ़ील्ड हैंडलर द्वारा ऑर्डर कैसे करें? मैंने
'click sortable'=> TRUE,
OR'sort' => array('handler' => 'views_handler_sort',),
OR$this->query->add_orderby('custom', 'count_depconf_field', 'DESC');
को कस्टम सॉर्ट हैंडलर में जोड़ने की कोशिश की । कोई भी काम नहीं करता है लेकिन 'ऑर्डर क्लॉज' में अज्ञात कॉलम लौटाता हैकिया : मैं कैसे
$row->product_id
और$row->nid
अंदर मिल सकता हैquery()
? मुझे इसकी जरूरत है कि उपकुंजी का निर्माण किया जाए। : एक दृश्य हैंडलर फ़ील्ड जोड़ा गया और रेंडर ($ मान) में पंक्ति मान मिला ...- संपन्न : उदाहरण हैंडलर का कौन सा हिस्सा मुझे संपादित करना है? केवल क्वेरी फ़ंक्शन? क्या मुझे पूरे उदाहरण कोड या बस कस्टम भागों को रखने की आवश्यकता है?
धन्यवाद