2015-10-19 3 views
0

У меня есть простая рекуррентная функция для вывода значений массива на веб-страницу. Он отлично работает, если я использую его от cms3\index.php. Но работает только частично (первый раунд), если я использую его от cms34\ww.admin\pages\menu.php.php CMS, код работает от index.php, но он не работает из более глубокой папки проекта CMS

Я просматривал книги: "CMS Design Использование PHP и JQuery", https://www.packtpub.com/web-develop...php-and-jquery В третьей главе они дают простой CMS пример.

Нижеприведенный сценарий должен читать базу данных и создавать гиперссылки на две веб-страницы.

// cms34\ww.admin\pages\menu.php 
<?php 
echo '<div id="pages-wrapper">'; 
$rs=dbAll('select id,type,name,parent from pages order by ord,name'); 
$pages=array(); 
foreach($rs as $r){ 
    if(!isset($pages[$r['parent']]))$pages[$r['parent']]=array(); 
    $pages[$r['parent']][]=$r; 
} 
function show_pages($id,$pages){ 
    if(!isset($pages[$id]))return; 
    echo '<ul>'; 
    foreach($pages[$id] as $page){ 
     echo '<li id="page_'.$page['id'].'"><a href="pages.php?id='.$page['id'].'">'; 
     echo '<ins>&nbsp;</ins>'.htmlspecialchars($page['name']).'</a>'; 
     show_pages($page['id'],$pages); 
     echo '</li>'; 
    } 
    echo '</ul>'; 
} 
show_pages(0,$pages); 
echo '</div>'; 

Это тот же скрипт с добавлением print_r для отладки.

<?php 

echo '<div id="pages-wrapper">'; 
$rs=dbAll('select id,type,name,parent from pages order by ord,name'); 
print_r('<br> in menu.php rs=').print_r($rs); 
$pages=array(); 
foreach($rs as $r){ 
     print_r('<br> in menu.php before if r=').print_r($r); 
    if(!isset($pages[$r['parent']]))$pages[$r['parent']]=array(); 
    $pages[$r['parent']][]=$r; 
     print_r('<br> in menu.php after if r=').print_r($r).print_r(' ;;r[parent][0]=').print_r($r['parent'][0]); 
} 
function show_pages($id,$pages){ 
    print_r('<br> in menu.php function show_pages, $id =').print_r($id); 
    print_r('<br> in menu.php function show_pages, $pages =').print_r($pages); 
    print_r('<br> in menu.php function show_pages, $pages[$id] =').print_r($pages[$id]); 
    if(!isset($pages[$id]))return; 
    echo '<ul>'; 
    foreach($pages[$id] as $page){ 
      print_r('<br> in menu.php foreach ').print_r(htmlspecialchars($page['name'])); 
     echo '<li id="page_'.$page['id'].'"><a href="pages.php?id='.$page['id'].'">'; 
     echo '<ins>&nbsp;</ins>'.htmlspecialchars($page['name']).'</a>'; 
     show_pages($page['id'],$pages); 
     echo '</li>'; 
    } 
    echo '</ul>'; 
} 
show_pages(0,$pages); 
echo '</div>'; 

Это как веб-страница выглядит:

rs=Array ([0] => Array ([id] => 24 [type] => 0 [name] => Home [parent] => 0) [1] => Array ([id] => 35 [type] => 0 [name] => Home2 [parent] => 0) [2] => Array ([id] => 36 [type] => 0 [name] => test [parent] => 24) [3] => Array ([id] => 38 [type] => 0 [name] => test3 [parent] => 24) [4] => Array ([id] => 25 [type] => 0 [name] => Second Page [parent] => 0)) 
in menu.php before if r=Array ([id] => 24 [type] => 0 [name] => Home [parent] => 0) 
in menu.php after if r=Array ([id] => 24 [type] => 0 [name] => Home [parent] => 0) ;;r[parent][0]=0 
in menu.php before if r=Array ([id] => 35 [type] => 0 [name] => Home2 [parent] => 0) 
in menu.php after if r=Array ([id] => 35 [type] => 0 [name] => Home2 [parent] => 0) ;;r[parent][0]=0 
in menu.php before if r=Array ([id] => 36 [type] => 0 [name] => test [parent] => 24) 
in menu.php after if r=Array ([id] => 36 [type] => 0 [name] => test [parent] => 24) ;;r[parent][0]=2 
in menu.php before if r=Array ([id] => 38 [type] => 0 [name] => test3 [parent] => 24) 
in menu.php after if r=Array ([id] => 38 [type] => 0 [name] => test3 [parent] => 24) ;;r[parent][0]=2 
in menu.php before if r=Array ([id] => 25 [type] => 0 [name] => Second Page [parent] => 0) 
in menu.php after if r=Array ([id] => 25 [type] => 0 [name] => Second Page [parent] => 0) ;;r[parent][0]=0 
in menu.php function show_pages, $id =0 
in menu.php function show_pages, $pages =Array ([0] => Array ([0] => Array ([id] => 24 [type] => 0 [name] => Home [parent] => 0) [1] => Array ([id] => 35 [type] => 0 [name] => Home2 [parent] => 0) [2] => Array ([id] => 25 [type] => 0 [name] => Second Page [parent] => 0)) [24] => Array ([0] => Array ([id] => 36 [type] => 0 [name] => test [parent] => 24) [1] => Array ([id] => 38 [type] => 0 [name] => test3 [parent] => 24))) 
in menu.php function show_pages, $pages[$id] =Array ([0] => Array ([id] => 24 [type] => 0 [name] => Home [parent] => 0) [1] => Array ([id] => 35 [type] => 0 [name] => Home2 [parent] => 0) [2] => Array ([id] => 25 [type] => 0 [name] => Second Page [parent] => 0)) 

Как вы можете видеть, данные извлекаются из базы данных. Но повторяющаяся функция show_pages($id,$pages) не выполняется во втором раунде. Я имею в виду эта часть show_page функции не выполняется:

foreach($pages[$id] as $page){ 
      print_r('<br> in menu.php foreach ').print_r(htmlspecialchars($page['name'])); 
     echo '<li id="page_'.$page['id'].'"><a href="pages.php?id='.$page['id'].'">'; 
     echo '<ins>&nbsp;</ins>'.htmlspecialchars($page['name']).'</a>'; 
     show_pages($page['id'],$pages); 
     echo '</li>'; 
    } 

In CMS i go to: 
http://localhost/cms34/ww.admin/index.php 
which requires 'pages.php'; 
which requires 'header.php' and 'pages/menu.php'; 

the header.php requires 'admin_libs.php', 
which requires require $_SERVER['DOCUMENT_ROOT'].'/cms34/ww.incs/basics.php'; 
which has __autoload, and DB connection functions. 

pages/menu.php показан на поставленный выше вопрос. Он получает данные о веб-страницах из таблицы:

$rs=dbAll('select id,type,name,parent from pages order by ord,name'); 

и выполняет повторную функцию для генерации гиперссылок.

Если я скопировать все из pages/menu.php в cms34\index.php и PREPEND линии:

//this line included file for DB connention and data retrieving functions 
    require $_SERVER['DOCUMENT_ROOT'].'/cms34/ww.incs/basics.php'; 

Гиперссылка генерируется и рецидивирующий функция работает. Но если я пытаюсь использовать код от cms34\ww.admin\pages\menu.php от CMS, он не работает.

+1

То, что вы разместили здесь, - это беспорядок для людей, чтобы распутать. Пожалуйста, уменьшите его до [** минимального **, полного и проверяемого примера] (http://stackoverflow.com/help/mcve) проблемы, с большим упором на * минимальный *. –

ответ

-1

Он начал работать без причины. Не знаю почему, но вчера он не работал. Если бы кто-нибудь мог объяснить, что может быть причиной и как решить ее быстрее, чем ждать в день, я бы очень признателен.

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

  • Нет связанных вопросов^_^