user2406735
user2406735

Reputation: 245

Creating different classes for each dynamicly created menu

I am using Zend2 and i am creating menu items dynamicly. This is the function i am using:

public static function getAdminMenu() {
    $config = \App\Application::getInstance()->getConfig();
    $menuItems = $config['menu_items'];

    $html = '<ul>';
    foreach ($menuItems as $section => $menuItem) {
        $html .= '<div class="user-menu-section">' . $section . '</div>';
        foreach ($menuItem as $subSection => $params) {
            $html .= '<li><a href="' . $config['router']['routes'][$menuItem[$subSection]['link']]['options']['route'] . '">' . $subSection . '</a></li>';
        }
    }
    $html .= '</ul>';
    return $html;
}

How can i create divs with different class user-menu-section for each menu item. It should be something like 'user-menu-section1', 'user-menu-section2'...

Or maybe better to use something like this: <div class="' . $section . '">; but in this case, if $section is a string of two words i would need '-' in between words and both words small caps, if it is possible.

Upvotes: 1

Views: 73

Answers (1)

Sam
Sam

Reputation: 16455

Well, just use your $section and modify this. Using ZF2, you'd use the Filter CamelCaseToDash

$filter        = new \Zend\Filter\Word\CamelCaseToDash();
$classFiltered = strtolower($filter->filter($class);)

Now you can use $classFiltered for your CSS-Class assignment.

And since you've mentioned both frameworks in your tags. In case you are using ZF2, that code is horrible :D You should create yourself a ViewHelper that renders the Menu. Evan Coury has written a very easy introduction on how to do that.

Aside from that, you don't need a static call to some Application::getInstance(). If you want to gain access to the config you do this via the ServiceLocator. In a Controller this would look like this:

$config = $this->getServiceLocator()->get('config');

If you need the config in another class outside of the Controller, you create the class from the ServiceLocator and inject the config into this class.

Upvotes: 2

Related Questions