Вопрос меню PHP - PullRequest
       9

Вопрос меню PHP

0 голосов
/ 29 марта 2010

В качестве одного из шагов на пути к большему редизайну веб-сайта я помещаю большую часть контента нашего веб-сайта в HTML-файлы, которые будут использоваться в качестве включений. Я намерен передать переменную на страницу шаблона PHP через URL, чтобы вызвать правильное включение.

На нашем веб-сайте есть много программ, каждая из которых нуждается в индексной странице, а также около 5 дополнительных страниц. Этим программным страницам потребуется система меню для навигации между различными страницами. Я называю страницы pagex_1, pagex_2, pagex_3 и т. Д., Где «pagex» описывает содержимое страницы.

Мой вопрос: как лучше всего справиться с этой системой меню? Есть ли способ изменить исходную переменную, используемую для перехода на страницу индекса, чтобы создать ссылки в меню для перехода на другие страницы?

Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 09 февраля 2016
// Menu Array multidimensional
$menu = array(
    'index' => array(
        'title' => 'Homepage',
        'include' => 'home.html',
        'subitems' => array()
    ),
    'products' => array(
        'title' => 'Products',
        'include' => 'products.html',
        'subitems' => array(
            'product1' => array(
                'title' => 'product1',
                'include' => 'product1.html',
                'subitems' => array(
                    'product1.2' => array(
                        'title' => 'product1.2',
                        'include' => 'product1.2.html',
                        'subitems' => array()
                    )
                )
            ),
            'product2' => array(
                'title' => 'product2',
                'include' => 'product2.html',
                'subitems' => array()
            ),
            'product3' => array(
                'title' => 'product3',
                'include' => 'product31.html',
                'subitems' => array()
            ),
            'product4' => array(
                'title' => 'product4',
                'include' => 'product4.html',
                'subitems' => array()
            )
        )
    )
);

// Make menu
function makeMenu($menu_array,$is_sub = false,$list=['ul','li']){
    $attr  = (!$is_sub) ? ' class="menu"' : ' class="submenu"';
    $child = NULL;
    $menu = "<{$list[0]}{$attr}>";
    foreach($menu_array as $id => $items){
        foreach($items as $key => $val){
            if( is_array($val) ) {
                if ( !empty($val) )  $child = makeMenu($val,true,$list);
            } else {
                $$key = $val;
            }
        }//foreach
        $menu .= "<{$list[1]}>";
            $menu .= '<a href="'.$include.'">'.$title.'</a>';
            $menu .= $child; // Sub Menu
        $menu .= "</{$list[1]}>";
        unset($url, $text, $sub);
    }//foreach
    $menu .= "</{$list[0]}>";
    return $menu;
}

// retrieve the desired page with the shaft
function makeSubMenu($menu, $key) {
   return makeMenu(array($menu[$key]));
}
// chain Article
function chainItem(array $array, $unset = '' ){
    $ds = array();
    if ( is_array($array) )
        foreach((array)$unset as $arr) unset($array[$arr]);
        foreach($array as $key=>$value)
            if (!is_array($value)) $ds[$key] = $value;
    return $ds;
}
// Build walk recursive -> single array insert database MySql
function walkRecursive($array, $ordId = true, $unset=[], $children = 'children',  $i = 1, $parent = 0, &$res = [] ) {
    if ( !is_array($array) ) return array();
    foreach(array_values($array) as $key=>$arr) {
        $das = array( 
            'id' => $id = $ordId ? $arr['id'] : $i++,
            'parent' => $parent
        );
        $res[] = array_merge($das,chainItem($arr,$unset));
        if( isset($arr[$children]) ) {
            walkRecursive($arr[$children], $ordId, $unset, $children, $i, $id, $res );
        }
    }
    return $res;
}

echo makeMenu($menu);

// Result of the print
<ul class="menu">
    <li><a href="home.html">Homepage</a></li>
    <li><a href="products.html">Products</a>
        <ul class="submenu">
            <li><a href="product1.html">product1</a>
                <ul class="submenu">
                    <li><a href="product1.2.html">product1.2</a></li>
                </ul>
            </li>
            <li><a href="product2.html">product2</a>
                <ul class="submenu">
                    <li><a href="product1.2.html">product1.2</a></li>
                </ul>
            </li>
            <li><a href="product31.html">product3</a>
                <ul class="submenu">
                    <li><a href="product1.2.html">product1.2</a></li>
                </ul>
            </li>
            <li><a href="product4.html">product4</a>
                <ul class="submenu">
                    <li><a href="product1.2.html">product1.2</a></li>
                </ul>
            </li>
        </ul>
    </li>
</ul>



// Build walk recursive -> single array insert database MySql
header("Content-type: text/plain");
print_r( walkRecursive($menu,false,['parent','id'],'subitems') );
// Print array -> Result:

Array
(
    [0] => Array
        (
            [id] => 1
            [parent] => 0
            [title] => Homepage
            [include] => home.html
        )

    [1] => Array
        (
            [id] => 2
            [parent] => 0
            [title] => Products
            [include] => products.html
        )

    [2] => Array
        (
            [id] => 3
            [parent] => 2
            [title] => product1
            [include] => product1.html
        )

    [3] => Array
        (
            [id] => 4
            [parent] => 3
            [title] => product1.2
            [include] => product1.2.html
        )

    [4] => Array
        (
            [id] => 4
            [parent] => 2
            [title] => product2
            [include] => product2.html
        )

    [5] => Array
        (
            [id] => 5
            [parent] => 2
            [title] => product3
            [include] => product31.html
        )

    [6] => Array
        (
            [id] => 6
            [parent] => 2
            [title] => product4
            [include] => product4.html
        )

)
0 голосов
/ 29 марта 2010

Я бы сохранил структуру меню в ассоциативном массиве PHP примерно так:

$menu = array(
  'index'=>array(
     'title'=>'Homepage',
     'include'=>'home.html',
     'subitems'=>array()
  ),
  'products' => array(
     'title'=>'Products',
     'include'=>'products.html',
     'subitems'=>array(
        'product1'=>array(
           ...
        ),
        'product2'=>array(
           ...
        ),
        'product3'=>array(
           ...
        )
     )
  )
);

Сделать этот массив доступным и для скрипта шаблона (например, с помощью include / require). Затем используйте разделители в переменной, чтобы идентифицировать пункт меню (как файловая система с папками и файлами) и, следовательно, итоговую страницу, которая будет включена:

  • 'index' идентифицирует страницу индекса
  • 'продукты' будут указывать стартовую страницу продуктов
  • 'products / product1' идентифицирует подстраницу продукта 1 на странице продуктов

... и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...