2010-02-23 3 views
0

У меня есть этот кусок кода в моем СХ:PHP всегда не нулевой

<ul class="subsection_tabs" id="tab_group_one" style="clear:none;"> 
    <?php if ($this->getChildHtml('description')==NULL) { echo '<div id="trollweb_1"></div>'; } else echo(' 
    <li class="tab"><a href="javascript:void(0);" id="trollweb_1" onClick="trollweb_tabs(1)" class="active"><h4>' . $this->__('Product Description'). '</h4></a></li> '); ?> 

Проблема в том, это всегда выводит «еще». Несмотря на то, что я не заполнял описание в задней части, и оно пустое.

Как это исправить?

+5

Что такое '$ this'? Что означает '$ this-> getChildHtml ('description')' return? Я сомневаюсь, что кто-то может помочь вам, не зная ответов на эти вопросы. –

+0

Да, убедитесь, что $ this-> getChildHtml ('description') не возвращает NULL. Пожалуйста, дайте дополнительную информацию. – alexn

+0

$ this-> getChildHtml ('description') возвращает текстовую область, которая может быть заполнена в бэкэнд cms (Magento). Я оставил текстовую область пустой. – a1anm

ответ

1

Возможно, getChildHtml() всегда возвращает строку (не NULL). И, возможно, строка в тестовой среде содержит только пробелы.
В этом случае trim() удаляет их, и вы можете просто проверить длину строки

if (0<strlen(trim($this->getChildHtml('description')))) { 
1

Если вы пытаетесь не только испытать для NULL, но и для пустых строк, то вы должны сделать

$childHtml = $this->getChildHtml('description'); 
if (empty($childHtml)) 

вместо этого.

EDIT: Как сказал VolkerK, empty('0') также возвращает false, так что решение зависит от ваших требований. Похоже, что вы ищете строковые решения, это жизнеспособный вариант, если у вас нет значений «0».

+0

Помните, что пустой ('0') === true, см. Http://docs.php.net/types.comparisons – VolkerK

+0

пустой работает только для переменных, а не для возвращаемых значений вызовов метода: http: // php.net/empty – middus

+0

@middus: Хорошо, я обновил свой ответ соответственно. – Residuum

Смежные вопросы