codeigniter कोडइग्नेटर और एचएमवीसी प्रश्न



themes frontend (1)

बस खोलें core/MY_Controller.php बनाएं, एक MY_Controller वर्ग बनाएं और इसे MX_Controller विस्तार MX_Controller , फिर उसी फाइल में अपने दूसरे बेस कंट्रोलर्स बनाएं और MY_Controller विस्तार MY_Controller । यहां एक उदाहरण है जिसे आप शुरू करने के लिए कॉपी / पेस्ट कर सकते हैं:

<?php defined('BASEPATH') OR exit('No direct script access.');

class MY_Controller extends MX_Controller {

    public function __construct()
    {
        // do some stuff here that affects all controllers
    }

}

class Frontend_Controller extends MY_Controller {

    public function __construct()
    {
        parent::__construct();
    }

}

class Backend_Controller extends MY_Controller {

    public function __construct()
    {
        parent::__construct();
        // Check admin login, etc.
    }

}

/* end file application/core/MY_Controller.php */

जहां तक ​​"अनेक थीम" चलते हैं, सुनिश्चित नहीं है कि आपको क्या चाहिए स्टाइलशीट नहीं? HTML टेम्पलेट्स? क्या आपके पास उपयोगकर्ताओं को स्विच करने की ज़रूरत है या आप इसे मैन्युअल रूप से करेंगे? क्या आपको मोबाइल उपकरणों का पता लगाने और तदनुसार थीम बदलने की ज़रूरत है? ऊपर के सभी? "सबसे अच्छा" तरीका आपके कार्यान्वयन पर निर्भर होने वाला है

मैं 2 पुस्तकालयों बनाने की सोच रहा हूं जो कि MY_Controller.php से फैली हुई है और ऑटो लोड उन्हें। क्या वह काम करेगा?

सुनिश्चित नहीं है कि आपको क्यों चाहिए या चाहते हैं ... बस ऐसा मत करो। आपको केवल अन्य कंट्रोलर्स के साथ इन वर्गों का विस्तार करना चाहिए।

विषयों के बारे में, मुझे ऐसे विचारों के लिए कई थीम हैं, जैसे: - / views/theme1/view_files.php - / views/theme2/view_files.php जेएस / सीएसएस / छवियों के बारे में, मैं स्वयं को व्यवस्थित कर सकता हूं शुरुआत में मैं थीम को ठीक कर दूंगा लेकिन बाद में, मैं उपयोगकर्ता को चुनने की अनुमति दे सकता हूं। एमवीसी के साथ, मैं उप-फ़ोल्डर्स में उप-फ़ोल्डर्स / उपरोक्त रूप में / एचएमवीसी के साथ थीम डाल सकता हूं, मुझे उन विषयों में व्यवस्था करने का दूसरा तरीका तलाशना होगा क्योंकि दृश्य फ़ोल्डर्स अलग हो गए हैं (मैं चाहता हूँ कि एक ही विषय की सभी दृश्य फाइल केवल 1 फ़ोल्डर) ..

चूंकि यह यहाँ से निपटने के लिए एक बहुत व्यापक सवाल है, और आपको अभी तक कुछ भी करने की कोशिश नहीं हुई है, मैं आपको एक न्यूनतम उदाहरण देगा:

class MY_Controller extends MX_Controller {

    public function __construct()
    {
        // do some stuff here that affects all controllers
        $this->theme = 'theme1'; // matches your directory name in /views/themes/
    }

}

अपने नियंत्रक से:

$this->load->view('themes/'.$this->theme.'/my_view_file');

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

// From "blog" module
$this->load->view('events/index');
// We just loaded `modules/events/views/index` from the blog module

वैसे भी, यह एक पूर्ण समाधान नहीं है, लेकिन उम्मीद है कि यह आपको एक विचार के साथ शुरू कर दिया जाएगा। ऐसा करने के कई तरीके हैं, ये दो टेम्पलेट लाइब्रेरी हैं जो पहले से ही थीम का समर्थन करते हैं:

सबसे पहले, इस पोस्ट की वजह से किसी भी सुविधा के लिए खेद है क्योंकि यह पहली बार है कि मैं यहां एक प्रश्न पोस्ट करता हूं और मुझे इसके साथ इस्तेमाल करने के लिए अधिक समय चाहिए।

Q1। मैं इस तरह फ्रंटएंड और बैकएंड के लिए 2 "मास्टर कंट्रोलर्स" बनाना चाहता हूं:

  • MY_Controller CI_Controller का विस्तार करता है
  • फ्रंटएण्ड MY_Controller विस्तारित करता है और सभी फ्रंटएंड नियंत्रक फ्रंटएंड का विस्तार करेंगे
  • बैकएंड MY_Controller विस्तारित करता है और सभी बैकेंड नियंत्रक बैकएंड का विस्तार करेंगे।

एचएमवीसी (एमएक्स) के साथ ऐसा करने का सबसे अच्छा तरीका क्या है?

धन्यवाद @ वेस्ले मीच को 3 वर्गों को MY_Controller, Frontend, Backend को MY_Controller.php में डाल करने के लिए विचार देने के लिए धन्यवाद, लेकिन मुझे लगता है कि प्रत्येक वर्ग को एक php फ़ाइल में डाल देना बेहतर है (क्लीनर)। या मैं गलत हूँ? मैं इस तरह एक संरचना बनाने की सोच रहा था:

  • ./core/MY_Controller.php (MX_Controller विस्तारित है)
  • ./libraries/backend.php (विस्तारित MY_Controller)
  • ./libraries/Frontend.php (विस्तारित MY_Controller)
  • Autoload.php में ऑटो लोड बैकेंड और फ्रंटएण्ड
  • सभी फ्रंटएंड नियंत्रक फ्रंटएन्ड का विस्तार करेंगे (उदाहरण: class Blog extends Frontend )
  • सभी बैकेंड नियंत्रक बैकएण्ड का विस्तार करेंगे (उदाहरण: class Admin extends Backend )

क्या उस कार्य को बैकएंड / फ्रंटएंड नियंत्रकों में एक और लाइन को बिना डाल करने के लिए काम करने के लिए काम कर सकते हैं, जिसमें_इनस या आवश्यकता_अनुमति : ./libraries/backend.php या ./libraries/backend.php ?

Q2। एचएमवीसी के साथ कई विषयों को कैसे कार्यान्वित करें? उदाहरण के लिए, एमवीसी में, हमारे पास 2 विषयों को इस तरह पहचाना जा सकता है:

  • ./application/views/ theme1 /view_files.php
  • ./application/views/ theme2/ view_files.php

लेकिन एचएमवीसी में, फ़ोल्डर्स अलग-अलग फ़ोल्डर्स के अंदर देखे जाते हैं और अगर मैं कई विषयों को लागू करना चाहता हूं, तो मुझे ऐसा करना पड़ता है:

  • ./application/modules/ module1 / views / theme1 /view_files.php
  • ./application/modules/ module1 / views / theme2 / view_files.php
  • ./application/modules/ module2 / views / theme1 /view_files.php
  • ./application/modules/ module2 / views / theme2 / view_files.php

यह वही नहीं है जो मुझे चाहिए क्योंकि मैं एक थीम के सभी विचारों को केवल एक फ़ोल्डर में रखना चाहता हूं और बाद में, अगर मैं एक नई थीम बनाना चाहता हूं, तो मुझे केवल एक थीम फ़ोल्डर डुप्लिकेट करना होगा। लेकिन मैं सोच रहा हूं कि मैं कैसे एचएमवीसी मॉडल को तोड़ने के बिना ऐसा कर सकता हूं (क्योंकि मुझे पता है कि एचएमवीसी मॉडल में, मॉडल, दृश्य, नियंत्रक एक मॉड्यूल फ़ोल्डर में हों-कम से कम सीआई के साथ)। यही वह संघर्ष है जो मैं फंस रहा हूं।