1

私はいくつかのPHPOOPを実行しているので、単純なナビゲーションメニューを作成するためのクラスを作成しています(将来的に拡張機能があります)。これで、1つのメニュー項目が難しいこのクラスを作成しました。方法がわかりません。私のクラスで配列を使用して次のようなクラスを使用する

<?php
$menu = new Navigation("Test", "mainmenu");

$menu->setMenuItem("home", "test");
echo $menu->display();

?>

ご覧のとおり、setMenuItem()を使用して各メニュー項目を指定できるはずです。方法。ただし、現時点では配列を使用していないため、最初の値のみを取得します

クラス自体は次のとおりです。

<?php
class Navigation implements navigationInterface {

    public $menu = null;
    public $name = null;
    public $klasse = null;

    public function __construct($name, $klasse) {

        $this->name = $name;
        $this->klasse = $klasse;

    }

    public function getName() {
        return $this->name;
    }

    public function getClass() {
        return $this->klasse;
    }

    public function setMenuItem($items) {
        $this->menuItem = $items;
    }

    public function getMenuItem() {
        return $this->menuItem;
    }

    public function display() {

        $menu = '<nav class="' . $this->getName() . '">';
        $menu .= '<li><a class="' . $this->getClass() . '" href="index.php?page=' . $this->getMenuItem() . '.php">' . $this->getMenuItem() . '</a></li>';
        $menu .= '</nav>';

        return $menu;

    }
}
?>

クラス内の配列をループと組み合わせて使用​​して、指定されたすべての値を持つメニューを作成する方法を教えてくれるのは誰ですか?

前もって感謝します。

4

4 に答える 4

6
<?php
class Navigation{

    public $menu = null;
    public $name = null;
    public $klasse = null;

    public function __construct($name, $klasse) {

        $this->name = $name;
        $this->klasse = $klasse;

    }

    public function getName() {
        return $this->name;
    }

    public function getClass() {
        return $this->klasse;
    }

    public function setMenuItem($items) {

        $this->menuItem = $items;
    }

    public function getMenuItem($menu) {
        return $menu;
    }

    public function display() {

        $menu = '<nav class="' . $this->getName() . '">';
        if(is_array($this->menuItem))
        {
        foreach($this->menuItem as $val)
        {
        $menu .= '<li><a class="' . $this->getClass() . '" href="index.php?page=' . $this->getMenuItem($val) . '.php">' . $this->getMenuItem($val) . '</a></li>';
        }
        }
        else{
            $menu .= '<li><a class="' . $this->getClass() . '" href="index.php?page=' . $this->getMenuItem($this->menuItem) . '.php">' . $this->getMenuItem($this->menuItem) . '</a></li>';

        }


        $menu .= '</nav>';

        return $menu;

    }
}
?>

<?php
$menu = new Navigation("Test", "mainmenu");

$menu_items=array("home","test");
$menu->setMenuItem($menu_items);

echo $menu->display();

?>
于 2012-11-04T17:53:49.753 に答える
1

実際には、1つではなく、2つのタイプがあります。

  1. MenuItemList
  2. MenuItem

MenuItemListリストの管理を担当します。内部で配列を使用できます。非常によく似たもののコード例は、前の回答「PHPの配列オブジェクト」にあります。

その隣に、display()メソッドは2つに属していません。代わりに、メニューリストの出力方法を知っているテンプレートを作成する必要があります。

echo '<ul>';
foreach ($menu as $item) {
   echo '<li class="menutitem ', $item->getClass(), '"><a href="index.php?page=', ...;
}
echo '</ul>';

これにより、メニューモデルが正しく機能し、適切にカプセル化されていることを認識しながら、テンプレート作成をより簡単に行える手続き的知識を維持することもできます。

于 2012-11-04T17:31:26.127 に答える
0

クラスのトップで

$menuItems = array();

その後、setMenuItem()

function setMenuItem($name, $value)
{
  $this->menuItems[] = array($name, $value);
}

それから

function display()
{
  // Your other code here
  foreach($this->menuItems as $item)
  {
    echo '<li><a href="'.$item[1].'">'.$item[0].'</a></li>';
  }
  // Your other code here
}

お役に立てば幸いです。

編集: 保存方法を変更したり、保存元のキーとしてnav "Name"を使用したりすることで重複を防ぐことができますが、わかりやすくするためにシンプルにしています。

ここに、より高度なサンプルがあります

function setMenuItem($name, $value)
{
  if(!in_array(array_keys($this->menuItems)), $name) {
    $this->menuItems[$name] = $value;
  } else {
    echo "That's already been added!"; //Handle this properly though
  }
}

それから

function display()
{
      // Your other code here
      foreach($this->menuItems as $name=>$value)
      {
        echo '<li><a href="'.$value.'">'.$name.'</a></li>';
      }
      // Your other code here
}
于 2012-11-04T17:29:50.263 に答える
0

このようにしてください:

<?php
class Navigation implements navigationInterface {

    public $menu = array();
    public $name = null;
    public $klasse = null;

    public function __construct($name, $klasse) {

        $this->name = $name;
        $this->klasse = $klasse;

    }

    public function getName() {
        return $this->name;
    }

    public function getClass() {
        return $this->klasse;
    }

    public function setMenuItem($name , $value) {
        $this->menu[$name] = $value;
    }

    public function getMenuItem($name) {
        return $this->menu[$name];
    }

    public function display() {

        if(!empty($this->menu)){

            $menu .= "<ul>";

            foreach($this->menu as $key => $value){
                $menu .= "<li><a href='".$value."'>$key</a></li>";
            }

            $menu .= "</ul>";
        }
        return $menu;
    }
}
?>

これがあなたに必要なものだと思います

于 2012-11-04T17:44:43.367 に答える