2011-01-03 13 views
6

में पहले अक्षर द्वारा नोड्स ग्रुपिंग को सॉर्ट और डिस्प्ले कैसे करें मेरे पास कंपनियों की एक बड़ी सूची है (नोडटाइप: कंपनी, केवल फ़ील्ड शीर्षक है) कि मैं उन्हें पहले अक्षर से समूहित करने के लिए एक अच्छा तरीका प्रदर्शित करना चाहता हूं इस तरह की डिक्शनरी:ड्रूपल:

A 
Abc company 
Alot of work company 

B 
Beautiful company 
Best company 

इसे एक सुंदर तरीके से करने का तरीका खोजने का प्रयास करना; इसके लिए कोई मॉड्यूल मौजूद नहीं है। कोई उपाय ?

उत्तर

2

ऐसा करने के लिए जो आप दृश्यों का उपयोग करना चाहते हैं, और कुछ अन्य योगदान मॉड्यूल नहीं, जैसे शब्दावली, आपको अपना स्वयं का दृश्य परिभाषित करना और थीम बनाना होगा।

सबसे पहले, आपको एक नया नोड व्यू बनाना होगा। मैं इसे myglossary कॉल करने जा रहा हूँ, लेकिन इससे कोई फर्क नहीं पड़ता। सुनिश्चित करें कि आपके फ़ील्ड में से एक नोड शीर्षक है, और यह नोड शीर्षक, आरोही द्वारा क्रमबद्ध है। दूसरे शब्दों में, वर्णमाला क्रम। मुझे लगता है कि आप अनफॉर्मेटेड पंक्ति शैली (यह डिफ़ॉल्ट है) का उपयोग करेंगे, लेकिन आप शायद अन्य पंक्ति शैलियों के साथ कुछ ऐसा कर सकते हैं।

फिर, आपको अपनी थीम में जाना होगा। विचार/थीम फ़ोल्डर से, दृश्य-दृश्य-unformatted.tpl.php टेम्पलेट को उस थीम के फ़ोल्डर में कॉपी करें जिसका आप उपयोग कर रहे हैं। इसे देखने के लिए नाम बदलें- देखें- unformatted - myglossary.tpl.php ताकि इसका उपयोग केवल इस दृश्य के लिए किया जाएगा। पंक्तियों फिर

//Change mytheme to your theme name 
function mytheme_preprocess_views_view_unformatted__myglossary(&$vars) { 
    //If you have the devel module installed, 
    //this is a great way to see all the available variables 
    //dpm($vars); 

    $results = $vars['view']->result; 
    $rows = $vars['rows']; 

    //Sort rows into letter sets 
    $letters = array(); 
    $i = 0; 
    foreach ($results as $result) { 
    $first_letter = strtolower(substr($result->node_title, 0, 1)); 
    if (is_array($letters[$first_letter])) { 
     array_push($letters[$first_letter], $rows[$i]); 
    } 
    else { 
     $letters[$first_letter] = array($rows[$i]); 
    } 
    $i++; 
    } 

    //Generate glossary navigation 
    $nav = ''; 
    foreach($letters as $letter => $rows) { 
    $num = count($rows); 
    $cap_letter = strtoupper($letter); 
    $nav .= <<<NAV 
<a href="#$letter" class="letter_link"> 
    $cap_letter 
</a> 
($num) 
NAV; 
    } 

    //Add to variables 
    $vars['nav'] = $nav; 
    $vars['letters'] = $letters; 
} 

, आप टेम्पलेट फ़ाइल आप नेविगेशन में जोड़ने के लिए पहले की प्रतिलिपि बनाई बदलना होगा, और उत्पादन के लिए: फिर, अपने विषय के template.php फ़ाइल को खोलने के लिए, और एक preprocess समारोह जोड़ने एक शब्दकोष शैली में:

<?php if (!empty($title)): ?> 
    <h3><?php print $title; ?></h3> 
<?php endif; ?> 

<?php if (!empty($nav)): ?> 
    <div id="glossary_nav"> 
    <?php print $nav; ?> 
    </div> 
<?php endif; ?> 

<?php foreach ($letters as $letter=>$rows): ?> 
    <a name="<?php print $letter ?>"></a> 
    <h4 class="letter"> 
    <?php print strtoupper($letter); ?> 
    </h4> 
    <?php foreach ($rows as $id=>$row): ?> 
    <div class="<?php print $classes[$id]; ?>"> 
    <?php print $row; ?> 
    </div> 
    <?php endforeach;?> 
<?php endforeach; ?> 

आप विषय रजिस्ट्री पुनर्जीवित करने के लिए अपने परिवर्तनों को अपनी साइट पर दिखाई की आवश्यकता हो सकती है।

+0

यह दृष्टिकोण काम कर सकता है, लेकिन आपको ऐसा करने की आवश्यकता नहीं है। आप बिना किसी कस्टम कोड के समान प्रभाव प्राप्त कर सकते हैं। – messedup

6

the Views module पर एक नज़र डालें, जो "शब्दावली" नामक एक दृश्य प्रदान करता है। वह सामग्री को वर्णानुक्रम से टाइप करता है, और प्रकार की एक पत्र अनुक्रमणिका बनाता है। http://drupal.org/node/441024 पर भी एक नज़र डालें, हालांकि यह संभव है कि उसने the Glossary module का उपयोग किया। Dictionary (demo) नामक एक मॉड्यूल भी है।

+0

Thx लगभग जो मैं चाहता था; आपके लिंक का पालन किया और उस एक http://nanwich.info/glossary पर आया जो वास्तव में मैं चाहता हूं। लेकिन मैं विचारों में फंस गया हूँ तर्क; मैं सभी पत्र दिखाना चाहता हूं लेकिन मैं केवल 1 वर्ण – Disco

+0

निर्दिष्ट कर सकता हूं क्या आप दृश्यों को खाली नहीं छोड़ सकते हैं और फिर यह सब दिखाएगा? – shanabus

1

यदि आप दृश्य मॉड्यूल का उपयोग करते हैं, तो क्या आपने टेम्पलेट में प्रीप्रोसेस विधि का उपयोग करने का प्रयास किया है?

function templatename_preprocess_views_view__All_Images(&$vars) 
{ 
    global $base_url; 
$images = array(); 
//drupal_add_js('$("a.colorbox").colorbox();','inline'); 
foreach($vars['view']->result as $img) 
{ 
    $nid = $img->nid; 
    $node = node_load($nid); 
    $images[$nid]['orig_img_url'] = $base_url . '/' . file_create_path($node->images['_original']); 
    $images[$nid]['thumb_img_url'] = $base_url . '/' . file_create_path($node->images['thumbnail']); 
} 
$vars['images'] = $images; 

}

: आप कि फैशन में अपने डेटा स्रोत से डेटा वापस नहीं किया जाएगा लेकिन आप किसी भी मनमाने ढंग से विधि आप के लिए एक बार यह वापस आ गया था चाहता था द्वारा यह सॉर्ट कर सकता है, यह कुछ इस तरह दिखेगा इस तरह आप पहले अक्षर से सॉर्ट कर सकते हैं और सरणी में बदलाव कर सकते हैं और यह आपके इच्छित फैशन में आपके दृश्य में भेजा जाएगा। यह एक उदाहरण है जिसे मैंने छवि पथों के लिए बनाया है लेकिन आप जिस क्रमबद्ध क्रम की आवश्यकता है उसे प्राप्त करने के लिए आप PHP की विविध प्रकार की सॉर्टिंग विधियों का उपयोग कर सकते हैं।

+0

क्या आप कुछ उदाहरण दे सकते हैं? – Disco

+0

यह देखने के लिए कि आप किस चर के साथ काम करेंगे, print_r ($ vars) का उपयोग करें। फिर आप इन दृश्यों को अपने दृश्य में उपयोग करने से पहले बदल सकते हैं। –

1

मॉड्यूल Views grouping Limit आपको जहां जाना है, मिल सकता है।

+0

नहीं; मैं वास्तव में सीमित नहीं करना चाहता; मैं नोड शीर्षक के पहले अक्षर से समूह बनाना चाहता हूं। – Disco

12

आपको इसे प्राप्त करने के लिए कोड पथ को नीचे जाने की आवश्यकता नहीं है। आप यहां वर्णित कुछ देख सकते हैं: http://drupal.org/node/641342

मूल रूप से, दो बार दृश्य में नोड शीर्षक जोड़ें। पहला लिंक आपके साथ सामान्य क्षेत्र है, आदि। दूसरा समूह समूह के लिए है।

दूसरा फ़ील्ड जिसे आप डिस्प्ले से बाहर करने के लिए चिह्नित करते हैं, लेबल को हटाते हैं, और फ़ील्ड को अधिकतम लंबाई 1 तक ट्रिम करें (शब्द सीमा, इलिप्सिस और एचटीएमएल विकल्पों को अनचेक करें)।

फिर, "पंक्ति शैली" विकल्पों के तहत आपको "समूह द्वारा" सेटिंग मिल जाएगी, और आप बस दूसरा नोड शीर्षक फ़ील्ड चुनें।

आप अतिरिक्त थीम लागू करना पड़ सकता है अगर आप इसे एक निश्चित तरीके से देख सकते हैं या संभवतः प्रत्येक अक्षर के लिए लंगर जोड़ने करना चाहते हैं, लेकिन अन्यथा कि

इसके अलावा Drupal के संस्करण 6 दृश्यों के साथ 2 मॉड्यूल के लिए काम करना चाहिए, मैं मॉड्यूल http://drupal.org/project/views_groupby द्वारा समूह को इंगित करना चाहिए जो कुछ अतिरिक्त कार्यक्षमता प्रदान कर सकता है लेकिन मूल प्रश्न के लिए वास्तव में इसकी आवश्यकता नहीं है।

+0

अच्छी सोच, क्योंकि मैं एक समान समस्या से निपट रहा हूं, आप उन पत्रों को "भरें" कैसे देंगे, जिनसे कोई परिणाम नहीं मिले? – magtak

+0

एनवीएम ने इसे स्वयं प्राप्त किया: http://drupal.stackexchange.com/questions/20754/views-group-by- फर्स्ट-letter-of-results/20855 – magtak

+0

ड्रूपल 7 के साथ मुझे "पंक्ति शैली" या " समूह द्वारा ", लेकिन प्रदर्शित करता है -> पृष्ठ विवरण -> प्रारूप -> प्रारूप -> सेटिंग्स – tremby

0

आप एजेड फ़िल्टर के साथ एक दृश्य बनाकर समान कार्यक्षमता प्राप्त कर सकते हैं (या आप उस कोड को बदल सकते हैं)। मैंने इस मुद्दे के बारे में एक पोस्ट मेरे blog पर लिखा था। आशा करता हूँ की ये काम करेगा।

1

यह केवल विचारों द्वारा किया जा सकता है। मैंने इसे वर्गीकरण के लिए एक समान सूची बनाने के लिए किया:

  1. मैंने सभी वर्गीकरण शर्तों की एक साधारण सूची बनाई है अर्थात शब्द नाम फ़ील्ड के रूप में।
  2. फिर मैंने फिर से वर्गीकरण शब्द क्षेत्र जोड़ा लेकिन इस बार मैंने शब्द का पहला नाम प्राप्त करने के लिए का उपयोग किया, उदाहरण के लिए फिर से लिखना आउटपुट-> सीमा संख्या अक्षरों-> सत्य। और सीमा को सेट करें 1. डिस्प्ले से इस फ़ील्ड को भी बाहर करें।
  3. अब प्रारूप-> सेटिंग्स पर जाएं और समूहकरण के लिए एकल वर्ण फ़ील्ड का उपयोग करें। अंत में वर्गीकरण अवधि फ़िल्टर के साथ परिणाम क्रमबद्ध करें।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^