سؤال

أنا أستخدم ZenD_Navigation (إضافة حلوة إلى الإطار، BTW) لبناء قائمة بلدي، وبعد ذلك يجب أن يتم تقديمها في الصفحة (من الواضح أنفسها). أقوم أولا بتعيين الحاوية في مكان ما في وحدة التحكم:

// $pages is the array containing all page information
$nav = new Zend_Navigation($pages);
$this->view->navigation($nav);

ثم، في التخطيط، يتم تقديمه مثل هذا:

echo $this->navigation()->menu();

الذي يعمل تماما. الآن: أريد أن يتم تقديم القائمة بشكل مختلف قليلا. تستخدم الصفحة التي أقيمها jQuery fisheye- البرنامج المساعد لبناء قائمة قفص الاتهام مثل MAC. ومع ذلك، يحتاج هذا البرنامج المساعد إلى علامات محددة ...

في الواقع، يستغرق <a> العناصر التي تحتوي على كل من <img> (للرمز) و <span> (ل Tooltip). يستحم مساعد عرض القائمة القياسي كل شيء داخل قائمة غير مرتبة (منطقيا)، مع 'label' المعلمة كنص الرابط.

يبدو أن المحتوى مرت إلى 'label' يتم هرب المعلمة قبل التقديم، لذلك إدراج HTML لن تفعلني أي جيد. بالإضافة إلى ذلك، لا يبدو أن فيش عادة أن تأخذ البنود الموجودة في <li> علامة، مع كل شيء ملفوفة في <ul></ul>, ، ولكن مجرد قائمة واحدة من المستوى <a> عناصر.

كنت أفكر في كتابة مساعد عرض مخصص للرصيف، والتي ستكون قادرة على الاعتناء بإدراج <img> و ال <span>, ، ولكن أواجه صعوبة في الحصول على مساعد عرض مخصص متصل بصف الملاحة. لا أستطيع معرفة مكان وضعه وفي أي طريقة، على الرغم من أن كل فئات مخصصة الأخرى (النماذج ومثل هذه) تعتني بحلها بواسطة Autoloader. أي أفكار حول هذا؟

ثم مرة أخرى، حتى لو استطعت الحصول على مساعد العرض هذا للعمل، ما زلت مغادرت مع قائمة HTML غير مرتبة - وأنا أعلم أنني أستطيع أن أفقد هذا واحد أيضا باستخدام مساعد عرض مخصص، لكنني كنت دائما محبا لاحتواء قوائم الملاحة داخل قائمة، من أجل الدلالات.

إذا كان بإمكان أي شخص مساعدتي قليلا، فسأكون نقدر ذلك كثيرا. إذا كان فيش فقط لا يعني العمل مع <ul>، سيكون ذلك سيئا للغاية ... هل سيكون هناك سبب وجيه لخسارة Zend_Navigation تماما في هذه الحالة؟

هل كانت مفيدة؟

المحلول

لم أر الطريق حتى الآن من حيث جعل العارض مخصص. إليك ما انتهى بي الأمر كذلك:

أولا، بدلا من تقديم مكالمة القائمة الافتراضية ()، قم بإنشاء جزئي لتقديمها إلى:

// 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>

يمكنك فقط تغيير العلامات في الجزئي وإضافة صورك / الرموز هناك.

نصائح أخرى

عذرا، للحصول على مشكلة التنسيق في المنشور السابق

لإضافة المساعد المخصص الخاص بك القيام بما يلي، في bootstrap الخاص بك:

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_'
          );

}

التالي إنشاء مساعد عرض مخصص الخاص بك ووضعه في مسار "addhelperprath". اعتمادا على ما تريد القيام به في حاجة إلى تطبيق وظيفة 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 التي تم إنشاؤها، يمكنك إضافتها إلى ملف التنقل الخاص بك أو ملف XML. علي سبيل المثال:

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

علامة XML مخصصة <img> سيتم تخزينها كملكية لصفحة التنقل ويمكن جلبها مثل:

foreach ($iterator as $page) {

    ...

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

    ...
}

أتمنى أن يساعدك هذا. نفذ

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top