PHP оператор if - выбрать две разные переменные get? - PullRequest
1 голос
/ 14 марта 2010

Ниже приведен пример скрипта:

<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\""); } ?>>For Sale</a></li>

Я хочу, чтобы PHP отображал "href =" # "class =" active " только тогда, когда его нет на двух страницах:

? Page = фотографии и просмотр = продажа

или

? Страница = фото и вид = проекты

Я тоже пробовал это, и оно не работает:

<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>

Ответы [ 4 ]

3 голосов
/ 14 марта 2010

Вы не можете сделать:

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

Вы должны сделать:

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

Если вы хотите очистить этот код, я бы предложил:

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;
}

и тогда ваш код становится:

<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>

Вышеуказанное является иллюстративным, а не окончательным и полным. Суть, которую я пытаюсь донести, заключается в том, что вы хотите привыкнуть использовать какой-то шаблонный механизм, даже если вы не используете библиотеку шаблонов (например, Smarty). Вы редко хотите встроить сложную логику в то, что в основном является представлением. Если вы используете библиотеку функций (или объектов) для создания разметки, это дает вам большой контроль над экранированием специальных символов, автоматической вставкой атрибутов, проверкой того, что вы вводите, или чем-то еще.

В этом примере вам, вероятно, понадобится структура данных, представляющая навигацию вашего сайта, в которую вы вводите текущую страницу, которая сравнивает ее со всеми записями при динамическом построении навигации и автоматически манипулирует ссылками. *

2 голосов
/ 14 марта 2010

В дополнение к указанным проблемам у вас также есть проблема с приоритетом операторов . && имеет более высокий приоритет, чем ||. Поэтому

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

эквивалентно

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

Но вы, очевидно, хотите

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

Возможно, не для двух вариантов, но если у вас есть больше вариантов, вы можете рассмотреть возможность использования! in_array () . например,

if (
  'photos'=$_GET['page']
  && !in_array($_GET['view'], array("projects","forsale"))
)
0 голосов
/ 14 марта 2010
if( $_GET[ 'page' ] != "photos" && $_GET[ 'view' ] != "forsale") {
   ...
} 
else if( $_GET[ 'page' ] != "photos" && $_GET[ 'view' ] != "projects") {
    ...
}
0 голосов
/ 14 марта 2010

<? Php $ view = $ _GET ['view']; <br /> if ($ _ GET ['page'] == 'photos' && ($ view == 'projects' || $ view == 'forsale'))
{
echo '

Фотографии ';
}
еще
{
echo ' Фотографии ';
}?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...