दिनांक सीमा (प्रारंभ, अंत) द्वारा किसी दृश्य को कैसे फ़िल्टर करें?


18

साथ Drupal 7 में दृश्य एक तिथि मॉड्यूल सक्रिय है, यह बहुत आसान तिथि से एक दृश्य को फ़िल्टर करने के लिए किया गया था: यूआई केवल आपके ऐसा करने के लिए विकल्प दे दी है।

Drupal 8 में, हालाँकि, दिनांक फ़ील्ड और दृश्य कोर का हिस्सा हैं, लेकिन यदि आप किसी दिनांक श्रेणी फ़ील्ड को फ़िल्टर के रूप में चुनते हैं, तो यह आपको अब तक विशिष्ट विकल्प प्रदान नहीं करता है, लेकिन आपको केवल पाठ फ़ील्ड के लिए फ़िल्टरिंग विकल्प दिखाता है:यहाँ छवि विवरण दर्ज करें

हालाँकि, दिनांक विशिष्ट विकल्प, आंतरिक तिथि मानों के लिए उपलब्ध हैं जैसे :कॉन्टेंट: चेंजेड options यहाँ छवि विवरण दर्ज करें

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

मैं दिनांक विशिष्ट कार्यों के साथ दिनांक फ़ील्ड द्वारा Drupal 8 में दृश्य कैसे फ़िल्टर कर सकता हूं?


उचित विचार फ़िल्टर दिनांक सीमाओं के लिए प्रक्रिया समस्या में हैं। पैच काम करता है, लेकिन अद्यतन पथ मुश्किल है।
mpdonadio

@mpdonadio क्या आप पैच के लिंक के साथ मेरी मदद कर सकते हैं, कृपया?
15:59 बजे user5950

2
यह drupal.org/node/2786577 है , लेकिन चेतावनी दी जाए कि अपडेट पथ पूरी तरह से परीक्षण नहीं किया गया है। इस पैच का उपयोग अपने जोखिम पर करें।
mpdonadio

@ पियरे.वीयरेंस यह कोई डुप्लिकेट नहीं है। यह आरंभ और समाप्ति तिथियों और उन पर फ़िल्टरिंग के साथ एक क्षेत्र के बारे में है। सिर्फ एक मूल्य क्षेत्र नहीं।
Neograph734

@ Neograph734 ठीक है, इससे मतभेदों को समझने में मदद मिलती है (वोट वापस हो गया)। लेकिन ओपर ने इस सवाल को बेहतर ढंग से संपादित करने के लिए शामिल किया है कि वास्तविक प्रश्न में भी (दूसरों से बचने के लिए इसे डुप्लिकेट के रूप में देखा जाएगा) ... शुभकामनाएँ!
पियरे.विरेंस

जवाबों:


14

आश्चर्यजनक रूप से यह ड्रुपल 8 के साथ अभी तक संभव नहीं है। लेकिन वहाँ यह काम करने की कोशिश कर का एक लंबा इतिहास है: https://www.drupal.org/node/2786577 पिछले पैच , तो आप इस पोस्ट में मिल जाए, काम करने लगता है। आप निम्न आदेशों का उपयोग करके इसे डाउनलोड और लागू कर सकते हैं:

wget https://www.drupal.org/files/issues/improve_the_views-2786577-76-core.patch
git apply improve_the_views-2786577-76-core.patch

यदि gitआपके सर्वर पर उपलब्ध नहीं है, तो कोशिश करें:

patch -p1 < improve_the_views-2786577-76-core.patch

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


क्या आप मुझे बता सकते हैं कि मेरे लिए काम नहीं करने वाले पैच को कैसे लगाया जाए !! @ user5950
मेक-मी-जिंदा

पैच -p1 <improve_the_views_integration_for_daterange_fields-2786577-60.patch ने मेरे लिए काम किया धन्यवाद @ user5950
मेक-मी-ज़िंदा

सुनिश्चित करें कि आप डेटाबेस अपडेट लागू करते हैं:drush updatedb --entity-updates
फिलिप मिगुएल फोंसेका

यदि आप पैच लगाने के लिए कंपोजर का उपयोग करते हैं, तो आप मॉड्यूल अपडेट करते समय स्वचालित रूप से लागू होंगे। उस ने कहा, यह एक 8.6 में शामिल होने जा रहा है - पैच कुछ दिनों पहले प्रतिबद्ध था!
मोर्टोना 42

5
हेड-अप के रूप में, यह कार्यक्षमता अब 8.6.0 से शुरू होती है
मैट फ्लेचर

0

मुझे नीलामी की तारीखों वाली एक सामग्री प्रकार को तीन समूहों (अब ऑनलाइन, आगामी और रजिस्टर करने के लिए तैयार) में फ़िल्टर करना था। जैसा कि इसमें कई daterange शामिल हैं, मैंने इस लेख पर आधारित एक प्लगइन लिखा: https://www.webomelette.com/creating-custom-views-filter-drupal-8

मूल रूप से तीन काम करता है: - क्षेत्र में तारीखों को स्थानीय तारीख और समय में बदलना। - फ़िल्टर में तीन संभावित सेटिंग्स 'अब ऑनलाइन', 'आगामी' और 'अन्य' हैं - सेटिंग्स के आधार पर यह संभव को जोड़ता है जहां-जहां क्वेरी से जुड़ा हुआ है

यह काम करता है और भविष्य के अपडेट के लिए मजबूत लगता है।

    <?php

    /**
     * @file
     * Definition of Drupal\d8views\Plugin\views\filter\NodeTitles.
     */

    namespace Drupal\d8views\Plugin\views\filter;

    use Drupal\views\Plugin\views\filter\FilterPluginBase;
    use Drupal\views\Plugin\views\filter\InOperator;
    use Drupal\views\Plugin\views\filter\ManyToOne;
    use Drupal\views\ViewExecutable;
    use Drupal\views\Views;
    /**
     * Filters by given list of node title options.
     *
     * @ingroup views_filter_handlers
     *
     * @ViewsFilter("d8views_node_titles")
     */
    class NodeTitles extends FilterPluginBase {
        // exposed filter options
        protected $alwaysMultiple = TRUE;

        /**
         * Provide simple equality operator
         */
        public function operatorOptions() {
            return [
                'nu_online' => $this->t('Nu online'),
                'binnenkort' => $this->t('Binnenkort'),
                'anders' => $this->t('Anders'),
            ];
        }


        public function query() {
            //Get the current domain.  
            //$domain = domain_get_domain();
            $nu_in_utc = new \DateTime('now', new \DateTimezone('UTC'));
            $nu_in_utc_in_iso = $nu_in_utc->format('Y-m-d\TH:i:s');
            $nu_date = $nu_in_utc->format('Y-m-d');
            /* 
            * Voeg relatie met datum veiling toe
            */
            $configuration = [
                'table'      => 'node__field_datum_veiling',
                'left_table' => 'node_field_data',
                'left_field' => 'nid',
                'field'      => 'entity_id',
                'type'       => 'LEFT',
                'extra_operator'   => 'AND',
            ];
            $join = Views::pluginManager('join')->createInstance('standard', $configuration);
            $this->query->addRelationship('node__field_datum_veiling', $join, 'node_field_data');

            /* 
            * Voeg relatie met online datum van de veiling
            */
            $configuration = [
                'table'      => 'node__field_datum_online',
                'left_table' => 'node_field_data',
                'left_field' => 'nid',
                'field'      => 'entity_id',
                'type'       => 'LEFT',
                'extra_operator'   => 'AND',
            ];

            $join = Views::pluginManager('join')->createInstance('standard', $configuration);
            $this->query->addRelationship('node__field_datum_online', $join, 'node_field_data');
            switch($this->operator) {
                case 'nu_online':
                    /* 
                    * Condities voor 'Nu online'
                    */
                    //dpm('Nu online');
                    $this->query->addWhere('AND', 'node__field_datum_veiling.field_datum_veiling_end_value', $nu_in_utc_in_iso, '>');
                    $this->query->addWhere('AND', 'node__field_datum_online.field_datum_online_value', $nu_date, '<=');
                    break;
                case 'binnenkort':
                    /* 
                    * Condities voor 'Binnenkort'
                    */
                    //dpm('Binnenkort');
                    $this->query->addWhere('AND', 'node__field_datum_veiling.field_datum_veiling_end_value', $nu_in_utc_in_iso, '>');
                    $this->query->addWhere('AND', 'node__field_datum_online.field_datum_online_value', $nu_date, '>');
                    break;
                case 'anders':
                    /* 
                    * Condities voor 'Anders' (dwz online, binnenkort, maar nog niet geweest)
                    */
                    $this->query->addWhere('AND', 'node__field_datum_veiling.field_datum_veiling_end_value', $nu_in_utc_in_iso, '>');
                    break;
            }
        }
    }

0

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

उदाहरण के लिए https://github.com/barsan-ds/interval-filter पर एक नज़र डालें


0

वर्तमान में दृश्य दिनांक सीमाओं के बारे में बहुत जानकारी नहीं है। यह प्रारंभ या समाप्ति तिथि को अलग-अलग फ़िल्टर के रूप में फ़िल्टर कर सकता है, लेकिन संपूर्ण तिथि सीमा के रूप में नहीं।

तिथि सीमा के आधार पर फ़िल्टरिंग को सक्षम करने के लिए मैंने मॉड्यूल व्यू डेट रेंज फ़िल्टर बनाया । वर्तमान में इसमें डेटाइम रेंज फ़ील्ड के लिए 3 अतिरिक्त फ़िल्टर हैं:

शामिल

तिथि सीमा के अनुसार फ़िल्टर जिसमें आपूर्ति की गई तारीख शामिल होती है।

ओवरलैप नहीं

तिथि सीमा के अनुसार फ़िल्टर जो आपूर्ति की गई तिथि सीमा के साथ ओवरलैप करते हैं।

द्वारा समाप्त होता है

तिथि सीमा के अनुसार फिल्टर जो आपूर्ति की तारीख से समाप्त होते हैं। "अंतिम तिथि <= आपूर्ति की तारीख" के बराबर। "प्रारंभ दिनांक" का उपयोग करते समय समूहीकृत फ़िल्टरों के लिए उपयोगी।


-3

दिनांक पॉपअप यह मॉड्यूल उद्देश्य की पूर्ति करता है।


मॉड्यूल अच्छा है, लेकिन यह केवल UI घटकों को बदलता है, और मूल्य प्रकार का प्रबंधन करने की अनुमति नहीं देता है।
दूधोवस्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.