2011-07-30 32 views
5

में मामलों की सूची प्राप्त करें मैं अपनी वेबसाइट के पृष्ठों को निर्धारित करने के लिए एक PHP स्विच स्टेटमेंट का उपयोग करता हूं। तो यहाँ एक उदाहरण है:?स्विच स्टेटमेंट

switch($page) { 
    case "about": 
     $title_name = "About Us"; 
     $page_content = "includes/about-us.php"; 
     include("inner.php"); 
    break; 
    case "services": 
     $title_name = "Services"; 
     $page_content = "includes/services.php"; 
     include("inner.php"); 
    break; 
} 

और मेरे फ़ाइल संरचना है index.php पृष्ठ = के बारे में जो /htaccess के बारे में/ उपयोग करने के लिए बदल देता है।

मैं जो करना चाहता हूं वह उस स्विच स्टेटमेंट में मेरे सभी पेज ले लेता है और इसे स्वचालित रूप से पकड़ लेता है और इसे एक सूची में डालता है ताकि मैं इसे अपने पाद लेख पृष्ठ पर लिख सकूं जहां मेरे पास सभी लिंक होंगे।

तो पाद लेख में सभी लिंक मैन्युअल रूप से टाइप करने की बजाय: घर | हमारे बारे में | सेवाएं | अक्सर पूछे जाने वाले प्रश्न, यह स्विच स्टेटमेंट में प्रदान किए गए पृष्ठों के आधार पर स्वचालित रूप से इसे खींच देगा।

क्या ऐसा करने का कोई तरीका है? यह स्वचालित रूप से नए पृष्ठों को जोड़ने में सक्षम होना भी अच्छा होगा और यह नए पेज के लिए एक नया मामला जोड़ देगा, और स्वचालित रूप से फ़ोल्डर को शामिल करता है।

यदि कोई मुझे सही दिशा में इंगित कर सकता है तो मैं वास्तव में इसकी सराहना करता हूं। मेरी समझ से, मुझे विश्वास नहीं है कि आप इसे स्विच स्टेटमेंट के साथ कर सकते हैं, मुझे पृष्ठों को कॉल करने के तरीके को फिर से काम करना होगा, है ना?

+0

+1, हालांकि मुझे संदेह है कि यह संभव है या नहीं। मैं भी आपके प्रश्न का उत्तर देखना चाहूंगा। – pimvdb

+0

यदि आप कथन पढ़ना चाहते हैं - यह असंभव है। खैर, यह संभव है, लेकिन बहुत बदसूरत और अस्थिर तरीके से। –

+0

@OZ_: आपका मतलब टोकननाइज़र है? मैं इसे भी अनुशंसा नहीं करता, सिवाय इसके कि एक _really_ स्रोत का विश्लेषण करना चाहता हूं (उदा। एपीआई पीढ़ी या ऐसा कुछ)। – KingCrunch

उत्तर

4

नहीं, यह switch का उपयोग कर संभव नहीं है - लेकिन आप एक सरणी में उन जानकारियां संग्रहीत कर सकती है:

$page_list = array(
    'about' => array(
     'title' => 'About Us', 
     'content' => 'includes/about-us.php', 
    ), 
    'services' => array(
     'title' => 'Services', 
     'content' => 'includes/services.php', 
    ), 
); 

if(isset($page_list[$page])) { 
    $page_info = $page_list[$page]; 

    $title_name = $page_info['title']; 
    $page_content = $page_info['content']; 

    include("inner.php"); 
} else { 
    // 404 - file not found 
} 

// create links 
foreach($page_list as $link_name => $page_ent) { 
    echo "<a href=\"/{$link_name}/\">{$page_ent['title']}</a><br />" 
} 

// output 
// <a href="/about/">About Us</a><br /> 
// <a href="/services/">Services</a><br /> 
+0

करेगा यह ठीक है कि मैं इसे कैसे करूँगा। स्विच इस मामले में विशेष रूप से उपयोगी नहीं है। – brezanac

+0

बहुत बढ़िया! यह बहुत अच्छा काम किया। हाँ जब मैंने शुरू किया, मैं बस कुछ आसान चाहता था जो मुझे तेजी से काम करने में मदद करेगी और मुझे लगा कि स्विच काफी आसान होगा और काम पूरा हो जाएगा। लेकिन यह बहुत अच्छा है, बहुत बहुत धन्यवाद। – Drew

+0

क्या मैं किसी पृष्ठ या सूची के माध्यम से नए पेज बनाना चाहता हूं, तो $ page_list सरणी के अंदर स्वचालित रूप से एक नई सरणी बनाने का कोई तरीका है? – Drew

8
$pages = array('about'=> 'About Us', 'services' => 'Services'); 

if (array_key_exists($page, $pages)) { 
    $title_name = $pages[$page]; 
    $page_content = "includes/$page.php"; 
    include('inner.php'); 
} 

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

लेकिन अपने प्रश्न का उत्तर देने के लिए: नहीं, आप रनटाइम के दौरान कोड-स्टेटमेंट का विश्लेषण नहीं कर सकते।

+0

आप ओपी के अनुरोध में सबसे महत्वपूर्ण बात खो रहे हैं - पाद लेख लिंक की स्वचालित पीढ़ी। – brezanac

+0

@holodoc। स्विच के बजाए सरणी मिलने पर यह आसान है।मुझे लगता है कि ओपी इसे भी समझने में सक्षम होना चाहिए। – GolezTrol

+0

@holodoc: "अपने पाद लेख के लिए आप पृष्ठों की सूची में बस फिर से शुरू कर सकते हैं।" मुझे लगता है कि ओपी एहसास करने में सक्षम है, कि एक साधारण 'foreach ($ id => $ name के रूप में $ पृष्ठ) {/ * पाद लेख कोड * /}' यह – KingCrunch

0

आपके पास यह पीछे है। आप जो चाहते हैं वह पृष्ठों की एक सरणी है, और उसके बाद एक बार स्विच स्टेटमेंट के लिए और एक बार पाद लेख के लिए लूप करें। या, बेहतर अभी तक, स्विच स्टेटमेंट से पूरी तरह से छुटकारा पाएं और इसके बजाय उस विशेष पृष्ठ को बनाने के लिए आपको एक सहयोगी सरणी मानचित्रण पृष्ठों का उपयोग करने की आवश्यकता हो सकती है (स्विच के बीच बहुत आम व्यवहार है, इसलिए यह जानना कि आपका पृष्ठ क्या है, आप संभवतः उस से उचित यूआरएल/आदि का निर्माण कर सकते हैं)।

0

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

<?php 

$pages = array('home', 'about', 'services', 'faq'); 
$titles = array('Home', 'About us', 'Services', 'FAQ'); 

$index = array_search($_POST['p'], $pages); 
if ($index !== false) { 
    $page_content = 'includes/' . $pages[$index] . '.php'; 
    $title_name = $titles[$index]; 
} else { 
    print 'Page not found'; 
} 

?> 

आशा है कि इससे मदद मिलेगी। रोचक प्रश्न के लिए

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