قائمة الإبحار :لا يستدعي page.xml الفئة التي تم تجاوزها (topmenu.php)

magento.stackexchange https://magento.stackexchange.com//questions/48751

سؤال

يحرر :حلها جوناثان هوسي.انظر في نهاية المنشور (أو أدناه) لسؤال آخر إذا كنت تريد مساعدتي بشأن تجاوز القالب والتخطيط :)

سؤال فرعي :هل يمكنني تجاوز page.xml وtopmenu.phtml وrenderer.phtml داخل الوحدة النمطية الخاصة بي أم يجب علي استبدالها يدويًا في مجلدات السمات؟إذا كان الأمر كذلك، هل تمانع أن تقودني إلى برنامج تعليمي أو تشرح لي بسرعة؟لا يبدو أنني وجدت بسهولة برنامجًا تعليميًا يناسب حالتي ...

أرغب في تجاوز topmenu.phtml، وrenderer.phtml، وقالب page.xml، داخل الوحدة النمطية الخاصة بي, ، إذا كان ذلك ممكنا.

شكرا على هذه المساعدة الإضافية :)


أنا مطور Magento جديد، لذا أحاول القيام بأشياء بسيطة، وفهمي لـ Magento محدود...

ما أريد القيام به هو عرض قائمة التنقل (أعلى) بطريقة أخرى (القائمة المنسدلة للوحة)، عن طريق إنشاء الوحدة النمطية الخاصة بي.لقد بحثت حيث تم تعريف/استدعاء القائمة الحالية ووجدت الملف design/frontend/{mytheme}/default/layout/page.xml الذي يبدو مثل :

<default translate="label" module="page">
    <block type="page/html" name="root" output="toHtml" template="page/3columns.phtml">
        <block type="page/html_header" name="header" as="header">
            <block type="core/text_list" name="top.menu" as="topMenu" translate="label">
                <label>Navigation Bar</label>
                <block type="page/html_topmenu" name="catalog.topnav" template="page/html/topmenu.phtml">
                    <block type="page/html_topmenu_renderer" name="catalog.topnav.renderer" template="page/html/topmenu/renderer.phtml"/>
                </block>
            </block>
        </block>
    </block>
</default>

(مع وجود العديد من الأشياء الأخرى، ولكنها ضرورية)

<block type="page/html_topmenu" name="catalog.topnav" template="page/html/topmenu.phtml">
    <block type="page/html_topmenu_renderer" name="catalog.topnav.renderer" template="page/html/topmenu/renderer.phtml"/>
</block>

تشير هذه السطور إلى أننا بحاجة إلى الفصل Mage_Page_Block_Html_Topmenu, ، والذي يتم عرضه في ملف القالب design/frontend/{mytheme}/default/template/page/html/topmenu.phtml, ، والذي يحتوي على :

<nav id="nav">
    <div class="nav-megadropdown col6">
        <?php echo $this->getHtml('level-top'); // $this is the a Topmenu object ?>
    </div>
    <div style="clear:both"></div>
</nav>

طريقة getHtml يصل إلى كتلة الطفل catalog.topnav.renderer ويحصل على فئته (Mage_Page_Block_Html_Topmenu_Renderer ويستدعي طريقة التقديم مع القالب design/frontend/{mytheme}/default/template/page/html/topmenu/renderer.phtml الذي يحتوي على قائمة معقدة ولكنها فعالة (لقد حاولت ذلك عن طريق تعديل فئات Mage وملفات phtml الخاصة بالموضوع، وقد نجح الأمر).

لكن الآن، أريد أن أجعل الأمر صحيحًا، من خلال تجاوز الفئات الموجودة داخل الوحدة النمطية الخاصة بي (التي تكون نشطة وتبدو وكأنها Fqu_Supergroup).لذلك بدأت باستخدام ملف config.xml :

<config>
    <modules>
        <Fqu_Supergroup>
            <version>0.1.0</version>
        </Fqu_Supergroup>
    </modules>
    <global>
        <blocks>
            <Page>
                <rewrite>
                    <html_topmenu>Fqu_Supergroup_Block_Html_Topmenu</html_topmenu>
                </rewrite>
            </Page>
        </blocks>
    </global>
</config>

و صفي (Fqu_Supergroup_Block_Html_Topmenu) في وحدتي (local/Fqu/Supergroup/Block/Html/Topmenu.php) يحتوي فقط على الأساليب التي تم تجاوزها (_getRenderedMenuItemAttributes و_getMenuItemClasses)

لذا، عندما أحاول استخدام الكود الخاص بي، تعرض الصفحة قائمة معطلة، لأنها لم تستخدم الفصل الدراسي الخاص بي (لقد قمت بتغيير الفصل (get_class($this)) تم استخدامه لعرض القائمة وإعادتها Mage_Page_Block_Html_Topmenu);وعندما أقوم بتفريغ الملفات المضمنة (get_included_files()) لا أرى أي إشارة إلى وحدتي على الإطلاق (على الرغم من أنه تم تنشيطها في لوحة الإدارة)...

آسف على هذا المنصب الطويل، ولكن شكرا لاهتمامكم وأي مساعدة!

سؤال فرعي :هل يمكنني تجاوز page.xml وtopmenu.phtml وrenderer.phtml داخل الوحدة النمطية الخاصة بي أم يجب علي استبدالها يدويًا في مجلدات السمات؟

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

المحلول

على الرغم من أنني لم أقوم بتحليل مشاركتك بالتفصيل، فإن أول شيء لاحظته عند النظر إلى ما ورد أعلاه هو أنك تعلن عن إعادة كتابتك بشكل غير صحيح، Page يجب أن يكون بدلا من ذلك page.هذه السلسلة لا تتطابق مع اسم الوحدة، أي.ال Page في Mage_Page, ، فهو بدلاً من ذلك يطابق السلسلة المستخدمة عند الإعلان عن المورد في الوحدة التي تقوم بإعادة كتابتها، لذلك في هذه الحالة في config.xml ل Mage_Page الوحدة الأساسية:

...
<blocks>
    <page> <!-- this is the string to match -->
        <class>Mage_Page_Block</class>
    </page>
</blocks>
...

عن طريق الرجوع page المباراة ضد الوحدة Mage_Page يتم تحديده من خلال فحص التكوين العام (والذي هو في الأساس ملف xml ضخم يحتوي على جميع ملفات config.xml ملفات لجميع الوحدات).يتم تحديد بقية السلسلة وفقًا لاسم الفئة html_topmenu خرائط للفئة Mage_Page_Block_Html_Topmenu كونه الفصل الذي سيتم تطبيق إعادة الكتابة عليه.

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

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