6

जोड़ने के लिए व्यू विस्तृत करें मुझे यकीन नहीं है कि मैं क्या कर रहा हूं यह है कि इसे संभालने के लिए सबसे अच्छा वाईआई समाधान है। तो मैं बेहतर समाधान के लिए खुला हूँ। ऐसा करने के लिए सबसे अधिक वाईआई तरीका क्या है।Yii2 उन्नत - कस्टम वैरिएबल

मेरे पास एक बाएं साइडबार है जो केवल लॉग इन करने वाले उपयोगकर्ता को दिखाया जाना चाहिए। यह समस्या नहीं है, मुझे पता है कि 'Yii :: $ app-> user-> isGuest' को चेक करके कुछ कैसे दिखाना है।

विशिष्ट पृष्ठों पर, मुझे यह साइडबार नहीं चाहिए, भले ही वे लॉग इन हों। उदाहरण के लिए, 'हमसे संपर्क करें' पृष्ठ पर बाईं ओर साइडबार की आवश्यकता नहीं है। मुझे वास्तव में परवाह नहीं है कि इसमें साइडबार है, लेकिन यह बूटस्ट्रैप 3 कॉलम को फेंक रहा है।

<div class="row"> 
    <div class="col-lg-4 center-col"> 

     <div class="site-contact"> 
      <h1><?= Html::encode($this->title) ?></h1> 

      <p> 
       If you have business inquiries or other questions, please fill out the following form to contact us. Thank you. 
      </p> 

      <div class="row"> 
       <div class="col-lg-12"> 
        [contact form code truncated] 
       </div> 
      </div> 
     </div> 

    </div> 
</div> 

यह पृष्ठ के मध्य में केंद्रित, 4 कोल्स चौड़ा लगता है।

लेकिन, मेरा Yii main.php (दृश्यपटल/विचारों/लेआउट/main.php) मैं, 2 अलग लेआउट है, तो उपयोगकर्ता के प्रवेश पर निर्भर करता है।

<div class="container-fluid mainpage"> 

    <?= Alert::widget() ?> 

    <div class="row"> 

     <?php if (!Yii::$app->user->isGuest) { ?> 

      <div class="col-md-3 sidebar"> 
       <?= Menu::widget([ 
        'options' => ['class' => 'nav nav-sidebar'], 
        'items' => [ 
          ['label' => 'Home', 'url' => ['site/index']], 
          ['label' => 'About', 'url' => ['site/about']], 
          ['label' => 'Contact', 'url' => ['site/contact']], 
         ], 
        ]); 
       ?> 
      </div> 

      <div class="col-md-9"> 
       <?= $content ?> 
      </div> 

     <?php } else { ?> 

      <div class="col-sm-12"> 
       <?= $content ?> 
      </div> 

     <?php } ?> 
    </div> 

</div> 

इस कोड में, एक से पता चलता पूर्ण चौड़ाई पृष्ठ यदि यह अतिथि है, या उपयोगकर्ता द्वारा लॉग इन किया गया है तो साइडबार।

'हमसे संपर्क करें' पृष्ठ जैसे पृष्ठों पर क्या हो रहा है, यह साइडबार की वजह से फ़ॉर्म को स्क्रंच किया जाता है। सही सामग्री 'col-md-9' है, और जब आप इसमें संपर्क फ़ॉर्म डालते हैं ('col-lg-4' होने के बाद) केवल 9 कॉलम के अंदर 4 लेता है, जिसके परिणामस्वरूप इसे स्क्रैच किया जाता है।

चूंकि यह पृष्ठ (संपर्क पृष्ठ) सार्वजनिक रूप से देखने योग्य होना चाहिए (यानी: यदि कोई उपयोगकर्ता लॉगिन नहीं कर सकता है, तो वे खराब हो जाएंगे और समर्थन से संपर्क नहीं कर पाएंगे), यह संभव है कि दोनों मामले हो सकते हैं। इसे लॉग इन सदस्य द्वारा देखा जा सकता है, जिसके परिणामस्वरूप स्क्रंच किए गए फॉर्म, या अतिथि द्वारा जो ठीक दिखता है।


मेरा दृष्टिकोण एक परिवर्तनीय $ showSidebar जोड़ने के लिए था। फिर contact.php में $ showSidebar = false है। चर के लिए डिफ़ॉल्ट कार्रवाई isGuest द्वारा निर्धारित की जाएगी, और पृष्ठ प्रति पृष्ठ आधार पर साइडबार को बंद करने के लिए इसे ओवरराइड कर सकते हैं।

मैं वास्तव में वैकल्पिक div या कोड दिखाने के लिए चेक के लिए चेक नहीं चाहता हूं, इसलिए मुझे लगता है कि यह सबसे अच्छा तरीका होगा।

मैं अपना खुद का चर जोड़ने के लिए व्यू कैसे बढ़ा सकता हूं? फ़ाइल विक्रेता/yiisoft/yii2/web/view में है मुझे लगता है ..

यह वाईआई 2 उन्नत टेम्पलेट है।

पीएस: मैं अपनी समस्या के बेहतर समाधान के लिए खुला हूं। मैं हैक्स नहीं चाहता, लेकिन इसे करने के लिए सबसे उचित वाईआई तरीका।

+0

मैं इसे हल कर लिया है (क्योंकि है कि हर किसी के लिए डिफ़ॉल्ट है), हालांकि मैं यह करने के लिए सबसे Yii तरीका है यकीन नहीं है यह। Yii2 में अपने लेआउट (main.php) से या नियंत्रक पृष्ठों (यानी: contact.php) में नियंत्रक तक पहुंचने के लिए आप '$ this-> संदर्भ-> उपयोगसाइडबार' का उपयोग करते हैं। अपने नियंत्रक में 'सार्वजनिक $ उपयोगसाइडबार = सत्य; 'भी डालें। मेरे पास डिफ़ॉल्ट रूप से यह सच है क्योंकि मेरे अधिकांश पृष्ठों में साइडबार होगा, केवल विशेष अवसरों पर मुझे इसकी आवश्यकता है। फिर contact.php में, या नियंत्रक की कार्रवाई में, इसे सही/गलत पर सेट करें। - एक अन्य विकल्प के साथ/बिना साइडबार के 2 लेआउट होंगे, और दृश्य (contact.php) लेआउट फ़ाइल को बदलें। –

+1

पीएस: मैंने अपनी टिप्पणी को उत्तर के रूप में नहीं जोड़ा क्योंकि यह मेरे प्रश्न का उत्तर नहीं देता है। मैं अभी भी जानना चाहता हूं कि वाईआई 2 उन्नत में व्यू क्लास का विस्तार कैसे करें। मुझे पता है कि फाइल कैसे विस्तारित करें, लेकिन इसे कहां जाना है? मुझे पता है कि मैं इसे कहीं भी रख सकता हूं, लेकिन इन विस्तारित वर्गों को डेवलपर्स के बीच स्थिरता के लिए कहां रखा जाए, इसका एक सामान्य उपयोग होना चाहिए। –

+0

2 लेआउट का उपयोग करने में क्या गलत है, और यदि आपको आवश्यकता हो तो आपके नियंत्रक कार्रवाई में लेआउट बदल जाता है? डिफ़ॉल्ट लेआउट साइडबार वाला एक हो सकता है, और उन पृष्ठों पर जहां आपको साइडबार की आवश्यकता नहीं है, आप लेआउट बदलते हैं। लेकिन मुझे पता है, यह केवल आपकी समस्याओं का आधा हल करता है :) – Asped

उत्तर

2

चूंकि दृश्य एक Yii घटक है, तो आप इसे yii कॉन्फ़िगरेशन फ़ाइल में अन्य घटकों की तरह सेट कर सकते हैं। बस निम्नलिखित की तरह sth जोड़ें:

'components'  => [ 
     'view'   => [ 
      'class' => 'app\components\extended\View', 
     ], 
+0

की कस्टम क्लास का उपयोग करने के लिए सेट कर सकें, अधिकांश लोग विस्तारित फ़ाइलों को कहां रखते हैं? मैंने देखा कि आप इसे "विस्तारित" निर्देशिका में डाल दें। साथ ही, उन्नत सेटअप में घटक निर्देशिका नहीं है। मैं उस दिन जहां भी चाहूं उन्हें फेंकने के बजाए सम्मेलन की तलाश में हूं। –

+0

ठीक है, चलो कदम से कदम जाओ। कृपया मुझे बताएं कि क्या यह आपके लिए काम करता है, और फिर हम इसे कहां रखना चाहते हैं। – Asped

1

मुझे लगता है कि सबसे अच्छा समाधान दो लेआउट बनाने के लिए है कि। एक साइडबार के साथ और साइडबार के बिना और वांछित लेआउट का उपयोग करें।

0

मेरे अनुसार सबसे अच्छा समाधान है, डेटाबेस सेटिंग्स तालिका बनाएं जो उपयोगकर्ता और संगठन के लिए मैप की गई है और संगठन के संबंध में विशिष्ट उपयोगकर्ता के लिए उस तालिका में मेनू को सहेजें।तो आप संगठन के लिए विशिष्ट प्रति उपयोगकर्ता के अनुसार मेनू को नियंत्रित कर सकते हैं।

लिए सेटिंग भी है जो आप उपयोगकर्ता के लॉग इन गैर को दिखा सकते हैं में एक डिफ़ॉल्ट मेनू बचाने