php

2010-05-26 3 views
16

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

मेरे पास तीन पृष्ठ और एक आम फ़ाइल है।

common.php:

<?php 
$nav = <<<EOD 
    <div id="nav"> 
     <ul> 
      <li><a <? if($page == 'one'): ?> class="active"<? endif ?> href="index.php">Tab1</a>/</li> 
      <li><a href="two.php">Tab2</a></li> 
      <li><a href="three.php">Tab3</a></li> 
     </ul> 
    </div> 
EOD; 
?> 

index.php: सभी तीन पृष्ठों उनके $ पेज को छोड़कर समान हैं प्रत्येक पृष्ठ पर अलग है।

<?php 
    $page = 'one';  
    require_once('common.php'); 
    ?> 
    <html> 
     <head></head> 
     <body> 
      <?php echo $nav; ?> 
     </body> 
    </html> 

यह केवल जब तक कि मैं प्रत्येक पृष्ठ पर मेरी नव शब्दों में कहें, लेकिन तब सभी पृष्ठों से एनएवी को अलग करने का पूरा उद्देश्य को बर्बाद कर दिया है काम नहीं करेगा।

क्या मैं भी संभव करना चाहता हूं? मैं क्या गलत कर रहा हूं?

धन्यवाद

संपादित करें: जब ऐसा करने, ली अंदर php कोड को चलाने के लिए नहीं है, यह सिर्फ मुद्रित किया जा रहा है जैसे कि यह एचटीएमएल

+0

सबसे पहले, PHP हेरेडोक तारों (केवल चर) में पार्स नहीं किया जाता है और दूसरा, समापन पहचानकर्ता (यानी ईओडी) लाइन की शुरुआत में होना चाहिए। –

+0

हाँ क्षमा करें मुझे पता है, सोचा था कि इसे इस तरह पढ़ना आसान होगा। ईओडी मेरे कोड में लाइन की शुरुआत में है, यह समस्या नहीं है। मेरी समस्या यह है कि यह ईओडी, पीएचपी में बिल्कुल क्या प्रिंट करता है। – patad

+0

php प्रिंट करने का कारण वाक्यविन्यास त्रुटि के कारण है: होना चाहिए

उत्तर

6

आपका index.php कोड सही है। मैं नीचे common.php के लिए अद्यतन कोड भी शामिल कर रहा हूं तो मैं अंतरों को समझाऊंगा। EOD; - - सब पर इंडेंट नहीं है

<?php 
    $class = ($page == 'one') ? 'class="active"' : ''; 
    $nav = <<<EOD 
     <div id="nav"> 
      <ul> 
       <li><a $class href="index.php">Tab1</a>/</li> 
       <li><a href="two.php">Tab2</a></li> 
       <li><a href="three.php">Tab3</a></li> 
      </ul> 
     </div> 
EOD; 
?> 

पहला मुद्दा है कि आप सुनिश्चित करें कि आपके हियरडॉक के लिए अंत घोषणा करने की जरूरत है। यदि यह इंडेंट है, तो आपको त्रुटियां मिलेंगी।

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

हेरेडोक सिंटैक्स को समझने के लिए, । से बचने की आवश्यकता के बिना तो अपने कोड भी इस तरह लिखा जा सकता है डबल कोट्स (") के भीतर यह सहित के रूप में ही है, लेकिन:

<?php 
    $class = ($page == 'one') ? 'class="active"' : ''; 
    $nav = "<div id=\"nav\"> 
      <ul> 
       <li><a $class href=\"index.php\">Tab1</a>/</li> 
       <li><a href=\"two.php\">Tab2</a></li> 
       <li><a href=\"three.php\">Tab3</a></li> 
      </ul> 
     </div>"; 
?> 

यह बिल्कुल वैसा ही काम करेंगे, बस कुछ अलग ढंग से लिखा है हेरेडोक और स्ट्रिंग के बीच एक और अंतर यह है कि आप मध्य में स्ट्रिंग से बाहर निकल सकते हैं जहां आप हेड्रोक में नहीं जा सकते। इस तर्क का उपयोग करके, आप निम्न कोड उत्पन्न कर सकते हैं:

<?php 
    $nav = "<div id=\"nav\"> 
      <ul> 
       <li><a ".(($page == 'one') ? 'class="active"' : '')." href=\"index.php\">Tab1</a>/</li> 
       <li><a href=\"two.php\">Tab2</a></li> 
       <li><a href=\"three.php\">Tab3</a></li> 
      </ul> 
     </div>"; 
?> 

फिर आप मूल रूप से इच्छित स्ट्रिंग में सीधे तर्क शामिल कर सकते हैं।

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

+0

इसके लिए बहुत बहुत धन्यवाद! सबकुछ मुझे समझ में आता है! – patad

+0

तो, सबसे अच्छा क्या है, Toader Mihai Claudiu की तरह एक नई फ़ाइल nav.php बनाएं, या बस "। (($ पृष्ठ == 'एक')? 'Class =" active "': '') का उपयोग करें।" स्ट्रिंग में? दोनों तरीकों से काम करते हैं .. – patad

3

मुझे लगता है कि आप ऊपर अपने $page = 'one'; लगाने की जरूरत थी requ_once .. अन्यथा मैं सवाल समझ में नहीं आता।

+0

हाय! यदि मैं requ_once से पहले या उसके बाद $ पृष्ठ डालता हूं तो कोई फर्क नहीं पड़ता। यह अभी भी वही चीज़ प्रिंट करता है:

patad

+0

PHP हेरेडोक तारों में पार्स नहीं किया जाता है। –

+0

आह प्रतीक्षा मैंने कुछ अनदेखा किया। आपके पास अपना पूरा कोड '<<< EOD' ब्लॉक के अंदर है। आपके अंदर मौजूद PHP कोड को पार्स नहीं किया जाएगा। अपनी common.php फ़ाइल में पहली 2 और अंतिम 2 पंक्तियों को निकालने का प्रयास करें। (इसलिए आपके पास केवल HTML शेष है)। – CharlesLeaf

1

आप इस नेविगेशन के लिए कोई फ़ंक्शन या क्लास क्यों नहीं बनाते हैं और पैरामीटर के रूप में सक्रिय पृष्ठ डालते हैं? इस तरह से आप के रूप में इसे कहते हैं, उदाहरण के लिए:

$navigation = new Navigation(1); 

या

$navigation = navigation(1); 
24

कारण है कि आप इसे इस तरह नहीं करते:

पन्नों में

:

<html> 
    <head></head> 
    <body> 
     <?php $page = 'one'; include('navigation.php'); ?> 
    </body> 
</html> 

नेविगेशन.एफ़पी

<div id="nav"> 
    <ul> 
     <li> 
      <a <?php echo ($page == 'one') ? "class='active'" : ""; ?> 
       href="index1.php">Tab1</a>/</li> 
     <li> 
      <a <?php echo ($page == 'two') ? "class='active'" : ""; ?> 
        href="index2.php">Tab2</a>/</li> 
     <li> 
      <a <?php echo ($page == 'three') ? "class='active'" : ""; ?> 
        href="index3.php">Tab3</a>/</li> 
    </ul> 
</div> 
में

आप वास्तव में उस पृष्ठ पर कहां नियंत्रित कर पाएंगे जहां आप नेविगेशन डाल रहे हैं और आप किन पैरामीटर को पास कर रहे हैं।

बाद में संपादित करें: निश्चित वाक्यविन्यास त्रुटि।

+0

अपने कोड और उसके तुलना में (जो हेड्रोक वाक्यविन्यास के उपयोग के साथ कोई समस्या है, ठीक है), मैं उसे देखकर कोड में आना पसंद करूंगा। पृष्ठ के शीर्ष पर चर घोषित किए जाते हैं, और नेविगेशन को रखने के लिए चर का उपयोग किया जाता है। सरल स्वरूपण मुद्दा, लेकिन व्यक्तिगत वरीयता।किसी भी मामले में, जबकि आपका उत्तर अच्छा है, यह पूछे गए प्रश्न का समाधान नहीं करता है। – Joseph

+0

मैंने इसे और यह पूरी तरह से काम किया! धन्यवाद तुम चट्टान! – patad

+0

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

1
  1. $page='one' इससे पहले कि आप नहीं require_once() के बाद हो जाना चाहिए। बहुत देर हो चुकी है- कोड पहले से ही जरूरी है, और $nav पहले से ही परिभाषित किया गया है।

  2. आपको include('header.php'); और include('footer.php'); का उपयोग $nav परिवर्तनीय प्रारंभ करने के बजाय करना चाहिए। इससे लचीलापन बढ़ जाता है।

  3. और कार्य करें।कुछ इस तरह वास्तव में चीजों को आसान का पालन करने के लिए बनाता है:

    function maybe($x,$y){return $x?$y:'';} 
    function aclass($k){return " class=\"$k\" "; } 
    

    तो आप इस तरह अपने "हालत" लिख सकते हैं:

    <a href="..." <?= maybe($page=='one',aclass('active')) ?>> .... 
    
2

मैं जानता हूँ कि यह पुराना है, लेकिन इन उत्तरों से कोई भी बहुत अच्छे हैं (sry ppl)

(जटिल वर्गों लिखने के बिना) यह करने के लिए सबसे अच्छा तरीका [ 'REQUEST_URI' वर्तमान $ _SERVER तुलना करने के लिए है ] लिंक के href के लिए। तुम लगभग वहां थे।

इसे आजमाएं। (http://ma.tt/scripts/intellimenu/ से लिया गया)

$nav = <<<EOD 
<div id="nav"> 
     <ul> 
      <li><a href="index.php">Tab1</a></li> 
      <li><a href="two.php">Tab2</a></li> 
      <li><a href="three.php">Tab3</a></li> 
     </ul> 
    </div> 
EOD; 

$lines = explode("\n", $nav); 
foreach($lines as $line) 
{ 
    if(preg_match('/href="([^"]+)"/', $line, $url)) { 
     if(substr($_SERVER['REQUEST_URI'], 0, 5) == substr($url[1], 0, 5)) { 
      $line = str_replace('><a', ' class="current-menu-item"><a', $line); 
     } 
    } 
    echo $line . "\n"; 
} 
9

इस समस्या का एक बहुत ही आसान समाधान यह करना है।

<ul> 
    <li class="<?php if(basename($_SERVER['SCRIPT_NAME']) == 'index.php'){echo 'current'; }else { echo ''; } ?>"><a href="index.php">Home</a></li> 
    <li class="<?php if(basename($_SERVER['SCRIPT_NAME']) == 'portfolio.php'){echo 'current'; }else { echo ''; } ?>"><a href="portfolio.php">Portfolio</a></li> 
    <li class="<?php if(basename($_SERVER['SCRIPT_NAME']) == 'services.php'){echo 'current'; }else { echo ''; } ?>"><a href="services.php">Services</a></li> 
    <li class="<?php if(basename($_SERVER['SCRIPT_NAME']) == 'contact.php'){echo 'current'; }else { echo ''; } ?>"><a href="contact.php">Contact</a></li> 
    <li class="<?php if(basename($_SERVER['SCRIPT_NAME']) == 'links.php'){echo 'current'; }else { echo ''; } ?>"><a href="links.php">Links</a></li> 
</ul> 

कौन सा होगा उत्पादन

<ul> 
    <li class="current"><a href="index.php">Home</a></li> 
    <li class=""><a href="portfolio.php">Portfolio</a></li> 
    <li class=""><a href="services.php">Services</a></li> 
    <li class=""><a href="contact.php">Contact</a></li> 
    <li class=""><a href="links.php">Links</a></li> 
</ul> 
0
CALL common.php 
<style> 
    .ddsmoothmenu ul li{float: left; padding: 0 20px;} 
    .ddsmoothmenu ul li a{display: block; 
    padding: 40px 15px 20px 15px; 
    color: #4b4b4b; 
    font-size: 13px; 
    font-family: 'Open Sans', Arial, sans-serif; 
    text-align: right; 
    text-transform: uppercase; 
    margin-left: 1px; color: #fff; background: #000;} 
    .current .test{ background: #2767A3; color: #fff;} 
</style> 
<div class="span8 ddsmoothmenu"> 
<!-- // Dropdown Menu // --> 
<ul id="dropdown-menu" class="fixed"> 
    <li class="<?php if(basename($_SERVER['SCRIPT_NAME']) == 'index.php'){echo 'current'; }else { echo ''; } ?>"><a href="index.php" class="test">Home <i>::</i> <span>welcome</span></a></li> 
    <li class="<?php if(basename($_SERVER['SCRIPT_NAME']) == 'about.php'){echo 'current'; }else { echo ''; } ?>"><a href="about.php" class="test">About us <i>::</i> <span>Who we are</span></a></li> 
    <li class="<?php if(basename($_SERVER['SCRIPT_NAME']) == 'course.php'){echo 'current'; }else { echo ''; } ?>"><a href="course.php">Our Courses <i>::</i> <span>What we do</span></a></li> 
</ul><!-- end #dropdown-menu --> 

</div><!-- end .span8 --> 

add each page 
<?php include('common.php'); ?> 
0
   <ul> 

       <li><a <?php echo ($page == "yourfilename") ? "class='active'" : ""; ?> href="user.php" ><span>Article</span></a></li> 
       <li><a <?php echo ($page == "yourfilename") ? "class='active'" : ""; ?> href="newarticle.php"><span>New Articles</span></a></li> 

       </ul> 
+0

मन अपने उत्तर को संपादित करें और इसमें विस्तृत विवरण जोड़ें। – SOFe

+0

यदि आप news.php पेज पर हैं तो इसका मतलब है कि यह वर्तमान news.php पेज मेनू को सक्रिय करता है –

0

समाधान मैं उपयोग कर रहा हूँ के रूप में इस प्रकार है और आप प्रति php पेज सक्रिय वर्ग स्थापित करने के लिए अनुमति देता है।

अपने प्रत्येक मेनू आइटम को एक अद्वितीय कक्षा दें, मैं .nav-x (एनएवी-के बारे में, यहां) का उपयोग करता हूं।

<li class="nav-item nav-about"> <a class="nav-link" href="about.php">About</a> </li>

(about.php यहाँ) प्रत्येक पृष्ठ के शीर्ष पर:

<!-- Navbar Active Class --> 
<?php $activeClass = '.nav-about > a'; ?> 

कहीं और (header.php/index.php):

<style> 
<?php echo $activeClass; ?> { 
    color: #fff !important; 
} 
</style> 

बस प्रति पृष्ठ .nav-about > a बदलें, .nav-forum > a, उदाहरण के लिए।

यदि आप प्रत्येक नौसेना आइटम के लिए अलग स्टाइल (रंग इत्यादि) चाहते हैं, तो इंडेक्स/हेडर पेज की बजाय उस पृष्ठ पर इनलाइन स्टाइल संलग्न करें।

0

अपने पृष्ठ को एनएवी बार से अलग करें।

pageOne.php:

$page="one"; 
include("navigation.php"); 

navigation.php

if($page=="one"){$oneIsActive = 'class="active"';}else{ $oneIsActive=""; } 
if($page=="two"){$twoIsActive = 'class="active"';}else{ $twoIsActive=""; } 
if($page=="three"){$threeIsActive = 'class="active"';}else{ $threeIsActive=""; } 

<ul class="nav"> 
    <li <?php echo $oneIsActive; ?>><a href="pageOne.php">One</a></li> 
    <li <?php echo $twoIsActive; ?>><a href="pageTwo.php"><a href="#">Page 2</a></li> 
    <li <?php echo $threeIsActive; ?>><a href="pageThree.php"><a href="#">Page 3</a></li> 
</ul> 

मैंने पाया मैं भी रूप में अच्छी तरह इस विधि के साथ अपने पृष्ठों के शीर्षक सेट कर सकते हैं।

$page="one"; 
$title="This is page one." 
include("navigation.php"); 

और केवल $ शीर्षक var को पकड़ें और इसे "शीर्षक" टैग के बीच में रखें। हालांकि मैं इसे अपने नेविगेशन बार के ऊपर अपने हेडर पेज पर भेज रहा हूं।

0

आप इस PHP का उपयोग कर सकते हैं, उम्मीद है कि यह मदद करता है।

<?php if(basename($_SERVER['PHP_SELF'], '.php') == 'home') { ?> class="active" <?php } else { ?> <?php }?> 

तो एक सूची नीचे की तरह होगी।

<ul> 
    <li <?php if(basename($_SERVER['PHP_SELF'], '.php') == 'home') { ?> class="active" <?php } else { ?> <?php }?>><a href="home"><i class="fa fa-dashboard"></i> <span>Home</span></a></li> 
    <li <?php if(basename($_SERVER['PHP_SELF'], '.php') == 'listings') { ?> class="active" <?php } else { ?> <?php }?>><a href="other"><i class="fa fa-th-list"></i> <span>Other</span></a></li> 
</ul> 
संबंधित मुद्दे