2010-07-10 20 views
10

मैंने PHP को phpBB2 पर हैकिंग करके सीखा, यहां तक ​​कि उनके डेटाबेस में कुछ मोड सबमिट कर रहे हैं, जिन्हें अन्य डाउनलोड और उपयोग करते हैं। (मुझे विश्वास नहीं है कि phpBB2 अब इतने लंबे समय से phpBB3 के साथ समर्थित है, इसलिए v2 mods डेटाबेस अब और नहीं है।)PHP और HTML को गठबंधन करने का पसंदीदा तरीका?

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

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

मैं कुछ PHP के साथ फिर से काम करना शुरू कर रहा हूं, लेकिन इस बार यह एक phpbb मंच नहीं होगा, और यह एक टीम पर होगा। मेरे अनुभव के आधार पर, PHP और HTML का अलगाव असामान्य है (अगर मैं इस पर गलत हूं तो कृपया मुझे सही करें!)। हालांकि, मैं उस विभाजन रेखा के लिए इतना उपयोग किया जाता हूं, मुझे मिश्रित PHP और HTML पढ़ने से नफरत है।

एचटीएमएल के तार
  • HTML फ़ाइलों पीएचपी ब्लॉक
  • PHP और एचटीएमएल पूरी तरह से अलग के साथ टूट के साथ
    • पीएचपी फ़ाइलें (:

      पीएचपी प्रोग्रामिंग के "वास्तविक दुनिया" में, पसंदीदा तरीका क्या है मेरी इच्छा है?)

    • कुछ और?
  • उत्तर

    7

    यदि आप एचटीएमएल से PHP को अलग करना चाहते हैं तो आप टेम्पलेट इंजन (स्मार्टी http://www.smarty.net/ की तरह) का उपयोग कर सकते हैं।

    +0

    मुझे लगता है कि यह वास्तव में ऐसी चीज है जिसे मैं PHP में विकसित करने के लिए देख रहा हूं, बिना phpbb से piggybacking। –

    3

    मेरे अनुभव में, बहुत से PHP विकास, बेहतर या बदतर के लिए, एक दूसरे से जुड़े php फ़ाइलों को समाप्त करने के माध्यम से समाप्त होता है जिसमें HTML की प्रिंट स्निपेट की आवश्यकता होती है।

    मन हालांकि, मेरी पीएचपी अनुभव के सबसे एक "हम सिर्फ कुछ है कि काम करता है की जरूरत है" की तुलना में एक

    +0

    यह बहुत समझ में आता है, और यह उन सभी कोडों को समझाता है जो मुझे झूठ बोलते हैं जिनके बारे में मुझे नफरत है। –

    2

    "हम सबसे सुंदर और कुशल समाधान की जरूरत है" समाधान के अधिक के लिए मैं के लिए एक टेम्पलेट प्रणाली का उपयोग करना पसंद है HTML फ़ाइलों में निहित PHP कोड की मात्रा को कम करें। मुझे वास्तव में एचटीएमएल से PHP को पूरी तरह से अलग करने का कोई तरीका नहीं दिख रहा है, लेकिन मुझे लगता है कि प्रस्तुति तर्क से व्यवसाय तर्क (डेटाबेस) को अलग करने के लिए पर्याप्त है।

    मेरा टेम्पलेट सिस्टम घर से बेक्ड है, लेकिन मुझे यकीन है कि आप एक विविध खोज पा सकते हैं जो Google खोज को पूर्ववत करके काम करेगा।

    4

    हम एमवीसी के लिए एक अनुकूलित कोड इग्निटर बेस का उपयोग करते हैं और केवल तर्क और लेआउट अलग हो जाते हैं। इसका मतलब यह नहीं है कि हमारे एचटीएमएल में कोई PHP नहीं है, सिर्फ तर्क के लिए इसका उपयोग नहीं किया जाता है। टेम्पलेट इमो में PHP कोड के साथ एक रिकॉर्डसेट के माध्यम से लूप करना बिल्कुल ठीक है, बस व्यावसायिक वस्तुओं से बात करने की कोशिश न करें और वास्तव में लेआउट टेम्पलेट्स में सामान करें। यदि आप वास्तव में सभी PHP कोड से छुटकारा पाने के लिए चाहते हैं तो आप टेम्पलेट्स के लिए tal या दस लाख अन्य लोगों की तरह कुछ भी देख सकते हैं।मैं थोड़े सोच रहा हूँ कि ज्यादातर overkill हालांकि, जब तक "विशेष परिस्थिति यहाँ डालने"

    संपादित तय टाइपो

    2

    मेरे अनुभव के आधार, पीएचपी और एचटीएमएल की जुदाई असामान्य है

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

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

    अब, आप पीएचपी

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

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

    • अधिकांश परियोजनाओं में मैं जिस तरह से उपयोग करता हूं वह है कि व्यापार परत से एक्सएमएल बनाना (एक्सएमएल सीरियलाइजेशन PHP में काफी आसान है), फिर एक्सएसएलटी का उपयोग एचटीएमएल पेज में बदलने के लिए करें। यह उन वेबसाइटों को करने में सक्षम बनाता है जो बनाए रखने के लिए बहुत आसान हैं और समझने में अधिक आसान हैं, और वैसे, जब आवश्यक हो, वेबसाइट डेटा प्रोग्रामेटिक रूप से (HTML पृष्ठ के बजाय XML लोड करना) तक पहुंचने में सक्षम बनाता है। दूसरी ओर, यह प्रदर्शन को काफी हद तक कम करता है, इसलिए प्रति सेकंड हजारों प्रश्नों वाली बड़ी वेबसाइटों के लिए इसका इरादा नहीं है।

    3

    किसी भी समय मैं किसी के PHP कोड ऑनलाइन देख, यह या तो एक छोटे से एक भी समारोह या इस तरह के, या PHP के साथ काम करने का टुकड़ा एचटीएमएल युक्त तार से भरा हुआ है है (या बुरा, पीएचपी के साथ HTML बीच-बीच में)।

    हाँ, कोड की सामान्य गुणवत्ता शर्मनाक है।

    जबकि आप अपने स्वयं के एक पूर्ण उड़ाए हुए इंजन पर जा सकते हैं, जो अधिक हो सकता है और कई मामलों में सीमित डोमेन-विशिष्ट-भाषाओं को आपके रास्ते में मिल जाएगा, जब आप केवल प्रेजेंटेशन तर्क लिख सकते हैं PHP में

    यदि आप चाहते हैं अभी भी सामान्य पीएचपी लिखने के लिए किया जाएगा, लेकिन स्पेगेटी के बिना:

    1. फ़ाइल के शीर्ष पर या एक अलग फ़ाइल में कार्रवाई कोड रखें। यहां केवल एप्लिकेशन तर्क डालें, किसी भी तरह का HTML या templating नहीं। टेम्पलेट द्वारा प्रदर्शित किए जाने वाले इस चरण में उत्पन्न होने वाली किसी भी जानकारी को टेम्पलेटिंग भाग, print व्यवसाय तर्क के बीच में एड आउट करने के लिए एक चर में जाने की आवश्यकता है।

    2. टैग-आधारित टेम्पलेटिंग का अपना ज्ञान लें और इसे PHP पर लागू करें।HTML और PHP प्रस्तुति तर्क दोनों के लिए कोड का एक एकल, सही इंडेंट पदानुक्रम है, जैसे कि आप 'अच्छी तरह से गठित' एक्सएमएल लिख रहे थे (चाहे आप वास्तव में एक्सएचटीएमएल का उपयोग कर रहे हों)। एचटीएमएल को तारों में हर कीमत पर डालने से बचें।

    3. htmlspecialchars() पर कॉल करने का एक आसान तरीका परिभाषित करें, क्योंकि अन्यथा टाइप करना कि हर समय वास्तविक दर्द होने वाला है, और यदि आप इसे टाइप नहीं कर रहे हैं तो आपको संभावित रूप से सुरक्षा-संवेदनशील त्रुटियां मिलेंगी ।

    संक्षेप में, उदाहरण के लिए .:

    <?php 
        // active code here 
        // do things 
        // put any errors in a $errors array 
    
        // this trivial function would presumably be in an include 
        // 
        function h($s) { 
         echo htmlspecialchars($s, ENT_QUOTES); 
        } 
    ?> 
    
    <body> 
        <?php if (count($errors)!=0) { ?> 
         <ul id="errors"> 
          <?php foreach ($errors as $error) { ?> 
           <?php h($error); ?> 
          <?php } ?> 
         </ul> 
        <?php } ?> 
        ... 
    </body> 
    

    पीएचपी प्रोग्रामिंग के "वास्तविक दुनिया" में, जो पसंदीदा तरीका है:,

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

    +0

    क्या आप मुझे इस तरह प्रारूपित गैर-तुच्छ परियोजना के लिए स्रोत कोड पर इंगित कर सकते हैं? मुझे अवधारणा पसंद है लेकिन मैं देखना चाहता हूं कि यह बड़े पैमाने पर कितना पठनीय है, और कितने विशिष्ट परिस्थितियों को संभाला जाता है। – Robert

    +3

    नहीं, मैं नहीं कर सकता। मुझे अभी तक एक सार्वजनिक रूप से उपलब्ध PHP प्रोजेक्ट को पूरा नहीं करना है, जिसका templating twisty little echo-HTMLs का एक भूलभुलैया नहीं है, सब एक जैसे। – bobince

    4

    व्यक्तिगत रूप से, मुझे मिश्रण में टेम्पलेट सिस्टम/भाषा जोड़ने का कोई कारण नहीं दिखता है, जब PHP पहले से ही एक अच्छा समाधान है।

    मेरा पसंदीदा दृष्टिकोण एप्लिकेशन के तर्क से प्रदर्शन को अलग करना है। यह एक पूर्ण उड़ा एमवीसी ढांचे का रूप ले सकता है। हालांकि, यह एक साधारण बात भी हो सकती है कि आप अपना कोड लिखने के बारे में कैसे जाते हैं।

    विस्तार:

    कभी ASP कोड की प्रचुर मात्रा के साथ मेरी एचटीएमएल interspersing की गलती कर के बाद से, मैं प्रदर्शन से अलग पेज तर्क की कोशिश की है। एक पृष्ठ के भीतर, इसका मतलब है कि सभी पृष्ठ तर्क शीर्ष पर रखें, जानकारी को चर में प्रदर्शित करने के लिए संग्रहीत करें और फिर PHP फ़ाइल के नीचे HTML के भीतर उन्हें प्रतिबिंबित करें। HTML भाग में दिखाई देने वाला एकमात्र तर्क प्रदर्शन तर्क है। दूसरे शब्दों में, सरल त्रुटि हैंडलिंग, ifs, loops, आदि मूल रूप से, वही सामान जो आपको सबसे अधिक templating भाषाओं में मिलेगा।

    टेम्पलेटिंग भाषाओं से बचने का मेरा कारण यह है कि यह सिंटैक्स का एक और रूप है जिसे मुझे चिंता करने की आवश्यकता है। क्या बात है? PHP इस उद्देश्य के लिए मुझे अधिक से अधिक प्रदान करता है।

    इस बीच, आप को अलग चीजों से एक सरल MVC दृष्टिकोण ले जा सकते हैं:

    controller.php

    <?php 
    // some application logic 
    $data['message'] = 'Hello, World.'; 
    
    include 'view.php'; 
    
    exit; 
    ?> 
    

    view.php:

    <html> 
    <head> 
    <title> 
    A simple 'MVC' view 
    </title> 
    </head> 
    <body> 
    <p> 
    <?php 
    
    echo $data['message']; 
    
    ?> 
    </p> 
    </body> 
    </html> 
    

    यह अपनी कमियां के बिना नहीं है और मुद्दे। हालांकि, अगर आपको लगता है कि आप आवेदन तर्क और प्रदर्शन के बीच पूर्ण, साफ अलगाव कर सकते हैं, तो आप गलत हैं।

    +1

    क्या आप इस पर विस्तार कर सकते हैं? पीएचपी और एचटीएमएल को अलग करने का समाधान PHP कैसे है? और आपके एमवीसी दृष्टिकोण के उदाहरण के बारे में क्या? मैं एमवीसी की अवधारणा को समझता हूं, लेकिन मेरा सप्ताहांत मस्तिष्क (केवल आधे रास्ते पर बदल गया है!) में तर्क और प्रस्तुति को अलग करने के लिए PHP एमवीसी की अवधारणा नहीं है। विस्तारित उत्तर के लिए –

    +0

    धन्यवाद। ऐसा लगता है कि आपकी सिफारिश [bobince] (http://stackoverflow.com/questions/3220655/preferred-way-to-combine-php-and-html/3220993#3220993) से अनुशंसा के समान है? –

    +0

    @ बॉबेंस हां, बहुत कुछ। मेरे जवाब के लिए प्रेरणा एक templating प्रणाली का उपयोग करने के खिलाफ चेतावनी थी। ऐसी स्थितियां हैं जहां वे उपयोगी हो सकती हैं। कहें, अगर आपके पास फ्रंट एंड के लिए समर्पित एक अलग टीम है। हालांकि, अगर आप PHP जानते हैं और आप HTML के लिए ज़िम्मेदार हैं (या बैक-एंड देवों को इसे बहुत छूना है), मुझे लगता है कि टेम्पलेटिंग सिस्टम आम तौर पर अधिक होते हैं। अच्छी कोडिंग प्रथाओं को प्रसंस्करण की एक अतिरिक्त परत के बिना एक ही चीज़ प्राप्त कर सकते हैं। –

    0

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

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