Меню Getting Zend_Navigation для работы с Подозрительным взглядом jQuery

Интересно, компиляция действительно оказывается более эффективной для меня (Python 2.5.2 на XP Победы):

import re
import time

rgx = re.compile('(\w+)\s+[0-9_]?\s+\w*')
str = "average    2 never"
a = 0

t = time.time()

for i in xrange(1000000):
    if re.match('(\w+)\s+[0-9_]?\s+\w*', str):
    #~ if rgx.match(str):
        a += 1

print time.time() - t

Выполнение вышеупомянутый код однажды, как, и однажды с два if строки, прокомментированные наоборот, скомпилированный regex вдвое более быстр

8
задан JorenB 7 August 2009 в 10:04
поделиться

2 ответа

Я еще не видел способа создать собственный рендерер. Вот что я в итоге сделал:

Во-первых, вместо рендеринга вызова menu () по умолчанию, создайте партиал для рендеринга:

// menu.phtml is partial, cms is module
$partial = array('menu.phtml', 'cms');
$this->navigation()->menu()->setPartial($partial);
echo $this->navigation()->menu()->render();

Затем (из документации) вы можете создать "собственный" рендер, например :

// -- inside menu.phtml
foreach ($this->container as $page) 
{
    // this just prints a "<a>" or "<span>" tag
    // depending on whether the page has a uri
    echo $this->menu()->htmlify($page), PHP_EOL;
}

В итоге я создал то, что у меня было изначально (меню с одним уровнем подменю), с помощью этого скрипта:

// -- another menu.phtml
<ul class="navigation">

<?php

$html = array();

foreach ($this->container as $page) 
{
    $html[] = "<li>";
    $html[] = $this->menu()->htmlify($page) . PHP_EOL;

    if (!empty($page->pages))
    {
        $html[] = "<ul>";
        foreach ($page->pages as $subpage) 
        {
            $html[] = "<li>";
            if ($href = $subpage->getHref()) $html[] = "<a href=\"{$href}\">";
            else $html[] = "<span>";
            $html[] = "<img src=\"/ui/cms/img/icons/edit.png\" alt=\"\"/>";
            $html[] = $subpage->getLabel();
            if ($href) $html[] = "</a>";
            else $html[] = "</span>";            
            $html[] = "</li>";
        }
        $html[] = "</ul>";
    }

    $html[] = "</li>";
}

echo join(PHP_EOL, $html);

?>
</ul>

Вы можете просто изменить разметку в партиале и добавить туда свои изображения / значки.

24
ответ дан 5 December 2019 в 05:26
поделиться

Извините, за проблему форматирования в предыдущем посте

Чтобы добавить свой собственный помощник, выполните в начальной загрузке:

protected function _initNavigation()
{
    $this->bootstrap('view');           // make sure we have a view
    $view = $this->getResource('view');     // get the view resource
    $config = new Zend_Config_Xml(APPLICATION_ROOT . '/config/navigation.xml','nav');
    $container = new Zend_Navigation($config);
    $view->navigation($container);

    // Tell Zend were it can find your custom helpers and what
    // the prefix is going to be.

   $view->addHelperPath(
          APPLICATION_ROOT . '/library/MyApp/View/Helper/Navigation',
          'MyApp_View_Helper_'
          );

}

Затем создайте пользовательский помощник представления и поместите его в путь 'addHelperPath'. В зависимости от того, что вы хотите сделать, вам необходимо реализовать как минимум свою собственную функцию htmlify. Взгляните на Zend / View / Help / Navigation / Menu. php в качестве примера.

class MyApp_View_Helper_MyMenu extends Zend_View_Helper_Navigation_Menu
{
    public function myMenu(Zend_Navigation_Container $container = null)
    {
        if (null !== $container) {
            $this->setContainer($container);
        }
        return $this;
    }

    protected function htmlify(Zend_Navigation_Page $page ) 
    {
        ...
    }
}

Затем в вашем скрипте phtml:

   <?php echo $this->navigation()->myMenu()->setMaxDepth(0); ?>

или просто

   <?php echo $this->navigation()->myMenu(); ?>

Теперь, если вы хотите добавить свои собственные настраиваемые свойства в сгенерированный HTML, вы можете добавить их в свой ini или xml файл навигации. Например:

<home>
  <label>Home</label>
  <uri>/</uri>
  <img>
      <src>/images/MyIcon.gif</src>
  <img>
</home>

Пользовательский тег xml будет сохранен как свойство страницы навигации и может быть получен следующим образом:

foreach ($iterator as $page) {

    ...

    $properties = new Zend_Config($page->GetCustomProperties());
    $myPicture = $properties->img->src;

    ...
}

Надеюсь, это поможет. Питер

7
ответ дан 5 December 2019 в 05:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: