PHP eğer beyanı - İki farklı olsun değişkenleri seçmek?

2 Cevap php

Aşağıda benim örnek script:

<li><a <?php if ($_GET['page']=='photos' && $_GET['view']!=="projects"||!=="forsale") { echo ("href=\"#\" class=\"active\""); } else { echo ("href=\"/?page=photos\""); } ?>>Photos</a></li>
<li><a <?php if ($_GET['view']=='projects') { echo ("href=\"#\" class=\"active\""); } else { echo ("href=\"/?page=photos&view=projects\""); } ?>>Projects</a></li>
<li><a <?php if ($_GET['view']=='forsale') { echo ("href=\"#\" class=\"active\""); } else { echo ("href=\"/?page=photos&view=forsale\""); } ?>>FveyaSale</a></li>

Ben PHP yankı istiyorum "href="#" class="active" sadece o iki sayfada değil:

?page=photos&view=forsale

veya

?page=photos&view=projects

Ben de bu denedim ve çalışmıyor:

<li><a <?php if ($_GET['page']=='photos' && ($_GET['view']!=='projects' || $_GET['view']!=='forsale')) { echo ("href=\"#\" class=\"active\""); } else { echo ("href=\"/?page=photos\""); } ?>>Photos</a></li>

2 Cevap

Sorununa ek olarak cletus da precedence of the operators ile bir sorunu var dikkat çekti. && | | daha yüksek bir önceliğe sahiptir. Bu nedenle

if (
  $_GET['page']=='photos'
  && $_GET['view']!=="projects"
  || $_GET['view']!=="forsale"
)

eşdeğerdir

if (
  ( $_GET['page']=='photos' && $_GET['view']!=="projects" )
  || $_GET['view']!=="forsale"
)

Ama tabii ki istiyorum

if (
  $_GET['page']=='photos'
  && ( $_GET['view']!=="projects" || $_GET['view']!=="forsale" )
)

Belki iki alternatif için ama daha fazla seçenek varsa kullanarak düşünebilirsiniz! in_array(). örneğin

if (
  'photos'=$_GET['page']
  && !in_array($_GET['view'], array("projects","forsale"))
)

Bunu yapamazsınız:

if ($var !== 'a' || !== 'b') ...

Yapmanız gereken:

if ($var !== 'a' || $var !== 'b') ...

Sizi bu kodu temizlemek istiyorsanız ben öneririm:

function active_view($content, $url, $view) {
  if ($_GET['view'] == $view) {
    return link($content, '#', 'active');
  } else {
    return link($content, $url);
  }
}

function active_page_view() {
  $args = func_get_args();
  $content = array_shift($args);
  $url = array_shift($args);
  $page = array_shift($args);
  if ($_GET['page'] == $page && !in_array($view, $args)) {
    return link($content, '#', 'active');
  } else {
    return link($content, $url);
  }
}

function link($content, $href, $class) {
  $ret = '<a href="' . $href . '"';
  if ($class) {
    $ret .= ' class="' . $class . '"';
  }
  $ret .= '>' . $content . '</a>';
  return $ret;
}

ve sonra kod olur:

<li><?php echo active_page_view('Photos', '/?page=photos', 'photos', 'projects', 'forsale'); ?></li>
<li><?php echo active_view('Projects', '/?page=photos&view=projects', 'projects'); ?></li>
<li><?php echo active_view('For Sale', '/?page=photos&view=forsale', 'project'); ?></li>

Yukarıda oldukça kesin ve tam olmaktan çok açıklayıcı. Ben üzerinden almaya çalışıyorum nokta Eğer bir çiftleşmiş kitaplığı (örneğin Smarty) kullanmayın bile çiftleşmiş bir tür mekanizma kullanarak alışkanlığı elde etmek istiyorum. Nadiren temelde bir görünümüdür ne içine karmaşık mantığı gömmek istiyorum. Bunu otomatik nitelikleri koymak, size özel karakterler kaçmak için kontrol bir sürü verir İşaretlemenizi oluşturmak için fonksiyonları (veya nesneleri) bir kütüphane kullanıyorsanız, koyarak veya ne olursa olsun konum ne doğrulamak.

Bu örnekte, muhtemelen geçerli sayfa ne girin ve dinamik navigasyon inşa ederken tüm girişleri karşılaştırır ve otomatik bağlantıları yöneten içine sitenizin navigasyon temsil eden bir veri yapısına sahip olmak istiyorum.