У меня есть, я думаю, довольно простой вопрос, но я не могу понять, что я делаю неправильно. У меня есть функция, которую я вызываю с помощью функции PHP eval
. Я ожидаю, что саморазвитый ArrayList получит в результате. Но вместо этого, когда я использую gettype
, я вижу результат NULL
. Хотя я использую return
в функции eval-ed.
Насколько я знаю, я играю это по документации, но почему-то это не работает. Есть предложения?
Фрагмент кода
<?php
$widgetList = new ArrayList();
for($i = 0; $i < $selectedTemplate->Regions->count(); $i++)
{
$region = $selectedTemplate->Regions->item($i);
if($region->Widget->selectiveContent == 1)
{
$widgetList->add($region->Widget);
}
}
if($widgetList->count() > 0)
{
?>
<tr>
<td colspan="2">
<strong>Widget instellingen</strong>
<hr size="1" width="100%" color="#333"/>
</td>
</tr>
<?php
for($i = 0; $i < $widgetList->count(); $i++)
{
?>
<tr>
<td class="w150">
<?= $widgetList->item($i)->title ?>
</td>
<td>
<select name="widget_<?= $widgetList->item($i)->id ?>" class="full">
<?php
$itemList = eval($widgetList->item($i)->functionCall);
for($j = 0; $j < $itemList->count(); $j++)
{
$selected = null;
if($_POST["widget_".$widgetList->item($i)->id] == $itemList->item($j)->id)
{
$selected = " selected=\"selected\"";
}
?>
<option value="<?= $itemList->item($j)->id ?>"<?= $selected ?>><?= $itemList->item($j)->title ?></option>
<?php
}
?>
</select>
</td>
</tr>
<?php
}
}
?>
Eval-ed code
public function getNavigationByLanguageId(Integer $parent, ArrayList $objectList, Integer $language)
{
$query = DataAccess::getAdapter()->query("
SELECT *
FROM `navigation`
WHERE `parent_id` = ".$parent->value."
AND `language_id` = ".$language->value."
AND `website_id` = ". $_SESSION["currentSite"]["id"]."
ORDER BY `sort_order`");
while($result = DataAccess::getAdapter()->fetchAssoc($query))
{
$link = new Model_Navigation();
$link->id = $result["id"];
$link->language = $result["language_id"];
$link->parent = $result["parent_id"];
$link->Page = Model_Page::getPageById(new Integer($result["page_id"]));
$link->title = $result["title"];
$link->externalUrl = $result["external_url"];
$link->sortOrder = $result["sort_order"];
$objectList->add($link);
Model_Navigation::getNavigationByLanguageId(new Integer($result["id"]), $objectList, $language);
}
return $objectList;
}
Оцениваемая функция: Model_Navigation::getNavigationByLanguageId(new Integer(0), new ArrayList(), new Integer(7));
Еще несколько пояснений по коду
Я использую эту функциональность в моей новой CMS. Пользователь может создавать шаблоны и размещать виджеты в определенных областях, почти так же, как и функциональность портлета, предоставляемая jQuery. Я установил виджеты для веб-сайта, я встроил опцию для вызова функции для получения списка объектов, когда виджет помечен как «Выборочное содержимое».
Здесь я пытаюсь добиться использования eval
для возврата ArrayLists из значения $ widget-> functionCall.