Помогите, пожалуйста, составить правильное выражение

Главные вкладки

Аватар пользователя IrinaStasuk@drupal.org IrinaStasuk@dru... 27 мая 2010 в 10:35

Каюсь, что не знаю php и до сих пор его не изучила. Но ПОМОГИТЕ!!! Очень нужно!

Нужно, чтобы блок показывался в типе материала training и не показывался на страницах */edit. Сниппеты, когда показываться-показываться или не показываться-не показываться - я нашла. И они замечательно работают. А вот подобную конструкцию нет. Попробовала включить логику, но нужны знания

<?php
$match = FALSE;
$types = array('training' => 1);
if (arg(0) == 'node' && is_numeric(arg(1))) {
$nid = arg(1);
$node = node_load(array('nid' => $nid));
$type = $node->type;
if (isset($types[$type])) {
$match = TRUE;
}
}
return $match;
?>
Это показывать в типе материла. Что нужно добавить, чтобы не показывать на страницах */edit?

Заранее спасибо за помощь!

Комментарии

Аватар пользователя IrinaStasuk@drupal.org IrinaStasuk@dru... 27 мая 2010 в 11:25

Еще раз огромное спасибо.

Если кому-то будет нужен код (показывать в типе материала training и не показывать на страницах изменения материала (edit), то у меня сработал такой код

<?php
$match = FALSE;
$types = array('training' => 1);
if (arg(0) == 'node' && is_numeric(arg(1)) && !arg(2)) {
$nid = arg(1);
$node = node_load(array('nid' => $nid));
$type = $node->type;
if (isset($types[$type])) {
$match = TRUE;
}
}
if (strpos($url, "edit")) {
$match = FALSE;
}
return $match;
?>

Аватар пользователя restyler restyler 27 мая 2010 в 15:52

"<a href="mailto:IrinaStasuk@drupal.org">IrinaStasuk@drupal.org</a>" wrote:
Если кому-то будет нужен код (показывать в типе материала training и не показывать на страницах изменения материала (edit), то у меня сработал такой код

у вас получился код, который работает до поры до времени. Такие вещи как
if (strpos($url, "edit")) { использовать неправильно, я уж не говорю про то что у вас переменная $url вроде и не определена.

Dan предложил гораздо более корректный и чистый вариант, одна строчка заменяет весь ваш процессинг.

Аватар пользователя IrinaStasuk@drupal.org IrinaStasuk@dru... 27 мая 2010 в 16:28

Спасибо большое за совет. Попробую еще раз ночью код, который предложил Dan.

if (strpos($url, "edit")) и все остальное - "свиснула" на drupal.org. Только там не было варианта показывать-не показывать. А введение второго аргумента помогло.

С php "не дружу" и даже не понимаю как это работает. Но буду изучать, как только немного разгружусь во времени. Очень интересно и полезно. Но использую (с оглядкой на свою недружбу) чужие решения и всегда делюсь своими находками с другими. Спасибо людям, которые выкладывают в интернет свои решения различных задач и проблем!

Аватар пользователя Dan Dan 27 мая 2010 в 19:54

Строка <?php return(($node = menu_get_object()) && $node->type == 'training' && arg(2) != 'edit'); ?>
Работает следующим образом:
1. $node = menu_get_object() -- загружается объект ноды. Почти то же самое что и node_load. Причём в переменную $node попадает именно текущая нода, которую мы просматриваем. Если мы находимся не на странице ноды то будет возвращен NULL
2. Проверятся ($node).
3. $node->type == 'training' -- проверяем тип ноды
4. arg(2) != 'edit' -- проверяем путь

Шаги 2,3 и 4 выполняются друг за другом и только в том случае если предыдущий шаг увенчался успехом, то есть не равен FALSE (или NULL или 0 или пустой строке и т.д.). Если все три проверки успешны - тогда строка возвращает TRUE, иначе - FALSE.

Теперь ты знаешь PHP чуть лучше Biggrin

Дальше можно не читать.
За код типа <?php if(($var = function()) && $another_var){} ?> некоторые ортодоксальные программисты ломятся бить по голове, навязывая запись типа <?php $var = function(); if($var && $another_var){} ?> и аргументируя тем, что можно ошибиться и опустить скобки и тогда выражение <?php if($var = function() && $another_var){} ?> будет выполняться всегда вне зависимости от значения переменных. Но я думаю, что в простых случаях (как данный), это вполне допустимо.
Это так, к справке Smile

Аватар пользователя IrinaStasuk@drupal.org IrinaStasuk@dru... 28 мая 2010 в 11:25

Огромное спасибо. В Drupal столько возможностей! А php нужно учить. На чужих кодах далеко не уедешь. Вчера не удалось проверить еще раз код Danа. Но впереди выходные.