Добавление новой страницы в интерфейс


ОБНОВЛЕНО

Я пытаюсь добавить новую страницу в интерфейсе. Я делаю следующее. У меня есть форма, в которой я использую свое действие для загрузки представления. При нажатии кнопки он никогда не переходит к контроллеру, пожалуйста, помогите мне, что я делаю неправильно.

Моя форма такая же, как

<div id="abc-category-search">
    <form id="abc-category-search-form" method="post" action="<?php echo Mage::getUrl('helloworld') ?>">
        <label for="search"><?php echo $this->__('Search by product SKU/Category') ?>:</label>
        <input id="abc-category-search-string" name="search" value="" />
        <input id="abc-category-search-cat" type="hidden" name="category" value="<?php echo $category; ?>" />
        <button id="abc-category-search-submit" type="submit" class="engine-btn" value="" >
            <?php echo $this->__('Search') ?>
        </button>
    </form>
</div>

И я добавляю такую страницу.

app/code/local/Abc/Helloworld/etc/config.xml

        <?xml version="1.0"?>
<config>
    <global>
        <modules>
            <Abc_Helloworld>
                <version>
                    0.1.0
                </version>
            </Abc_Helloworld>
        </modules>
        <blocks>
            <abc_helloworld>
                <class>Abc_Helloworld_Block</class>
            </abc_helloworld>
        </blocks>
    </global>
    <frontend>
        <routers>
            <helloworld>
                <use>standard</use>
                <args>
                    <module>Abc_Helloworld</module>
                    <frontName>helloworld</frontName>
                </args>
            </helloworld>
        </routers>
        <layout>
            <updates>
                <helloworld>
                    <file>abc_helloworld.xml</file>
                </helloworld>
            </updates>
        </layout>

    </frontend>
</config>

И

app/code/local/Abc/Helloworld/controllers/IndexController.php

<?php

class Abc_Helloworld_IndexController extends Mage_Core_Controller_Front_Action {
    public function indexAction() {
        $this->loadLayout();
        $this->renderLayout();
    }
}

И

    app/code/local/Abc/Helloworld/Block/Helloworld.php
<?php

    class Abc_HelloWorld_Block_Helloworld extends Mage_Core_Block_Template {
        // necessary methods
    }

И файл макета

 app/design/frontend/default/Jin/layout/abc_helloworld.xml


<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.1.0">
  <helloworld_index_index>
    <reference name="content">
      <block type="abc_helloworld/helloWorld" name="helloworld_any_block" template="helloworld/index.phtml" />
    </reference>
  </helloworld_index_index>
</layout>

И .phtml

app/design/frontend/default/jin/template/helloworld/helloworld.phtml

<div>
    <?php
        echo 'Abdul Ghaffar'; 
    ?>
</div>
Author: Abdul Ghaffar, 2016-06-20

2 answers

Проблема заключается в вашем XML-файле обновления макета, особенно в следующем объявлении блока.

<block type="abc_helloworld/index" name="helloworld_any_block" template="helloworld/index.phtml" />

Magento не удается найти этот блок, потому что у вас нет объявления блока в файле config.xml. Поэтому вам необходимо обновить свой config.xml файл со следующим кодом:

<config>
    <global>
        <blocks>
            <abc_helloworld>
                <class>Abc_HelloWorld_Block</class>
            </abc_helloworld>
        </blocks>
    </global>
</config>

Здесь вы объявляете имя своей группы блоков. Вот и все.

Если вы хотите использовать свой собственный пользовательский блок, то ссылку на ваш блок также необходимо будет изменить следующим образом это.

<block type="abc_helloworld/helloWorld" name="helloworld_any_block" template="helloworld/index.phtml" />

Разница здесь в том, что я использую abc_helloworld/helloWorld вместо abc_helloworld/index. Это связано с тем, что ваша ссылка на тип блока ищет блок Abc_HelloWorld_Block_Index, который не определен.

Также убедитесь, что default/jin является вашей текущей темой пакета. В противном случае было бы лучше переместить файл шаблона phtml в каталог тем пакета base/default, так как это последнее резервное расположение для Magento.

Убедитесь, что вы очистили весь кэш после всех внесенных изменений. Счастливое кодирование

РЕДАКТИРОВАТЬ - 1

Ваше действие формы также необходимо изменить.

Это должно быть похоже на

<form id="abc-category-search-form" method="post" action="<?php echo Mage::getUrl('helloworld') ?>">

Позвольте Magento сгенерировать для вас правильный URL-адрес. :)

РЕДАКТИРОВАТЬ - 2

Используйте приведенный ниже config.xml файл

<?xml version="1.0"?>
    <config>
        <modules>
            <Abc_HelloWorld>
                <version>0.1.0</version>
            </Abc_HelloWorld>
        </modules>
        <global>
            <blocks>
                <abc_helloworld>
                    <class>Abc_HelloWorld_Block</class>
                </abc_helloworld>
            </blocks>
        </global>
        <frontend>
            <routers>
                <helloworld>
                    <use>standard</use>
                    <args>
                        <module>Abc_HelloWorld</module>
                        <frontName>helloworld</frontName>
                    </args>
                </helloworld>
            </routers>
            <layout>
                <updates>
                    <helloworld>
                        <file>abc_helloworld.xml</file>
                    </helloworld>
                </updates>
            </layout>
        </frontend>
    </config>

Основное отличие здесь в том, что вы используете Helloworld вместо HelloWorld почти во всех конфигурациях, и я также изменил имя интерфейса маршрутизатора на helloworld вместо Helloworld.

Убедитесь, что у вас есть файл активации для вашего модуля

Файл : app\etc\modules\Abc_HelloWorld.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Abc_HelloWorld>
            <active>true</active>
            <codePool>local</codePool>
        </Abc_HelloWorld>
    </modules>
</config>

ОКОНЧАТЕЛЬНОЕ РЕДАКТИРОВАНИЕ

Magento чувствителен к письмам. И я, и диджиталпианизм говорим об одном и том же. Вы используете файловую структуру Abc\HelloWorld. Следовательно, вам нужно использовать ту же концепцию именования. т.е. Abc_HelloWorld. Или, если вам нравится иметь имя класса Abc_Helloworld, то ваша файловая структура должна быть Abc/Helloworld.

Теперь о XML-файле обновления макета. У вас есть файл шаблона helloworld/helloworld.phtml, и, следовательно, вам нужно правильно указать его в своем блоке. ie

<block type="abc_helloworld/helloWorld" name="helloworld_any_block" template="helloworld/helloworld.phtml" />

В этом блоке обычно будет указано 3 вещи в Magento.

Предполагает, что ваш модуль Abc_HelloWorld, а не Abc_Helloworld, и ваша файловая структура похожа Abc/HelloWorld

  1. Мой блок имеет тип = abc_helloworld/helloWorld. Это будет прочитано Magento, как Abc_HelloWorld_Block_HelloWorld.

  2. Мое имя блока - helloworld_any_block

  3. Используйте app\design\frontend\{package}\{theme}\template\helloworld/helloworld.phtml в качестве шаблона моего блока.
 5
Author: Rajeev K Tomy, 2016-06-20 09:33:40

Проблема в вашем случае заключается в том, что ваша форма не вызывает правильное действие.

Имя, которое вы указываете в своем config.xml, следующее: Helloworld (кстати, я предлагаю вам изменить его на helloworld ).

Таким образом, ваше действие формы должно быть helloworld/index/index вместо abc_helloWorld/index/index

Кроме того, в объявлении макета вашего интерфейса отсутствует тип имени файла.

Вместо:

    <layout>
        <updates>
            <helloworld>
                <file>abc_helloworld</file>
            </helloworld>
        </updates>
    </layout>

Это должно быть:

    <layout>
        <updates>
            <helloworld>
                <file>abc_helloworld.xml</file>
            </helloworld>
        </updates>
    </layout>

Наконец, ваши блоки вообще не объявлены. Вы должны сделать следующее под тегом <config> вашего config.xml :

<global>
    <blocks>
        <abc_helloworld>
            <class>Abc_Helloworld_Block</class>
        </abc_helloworld>
    </blocks>
</global>

Последнее замечание, я полагаю, у вас проблема с папкой вашего модуля.

Действительно, имя модуля объявлено в вашем config.xml как Abc_Helloworld, но ваша папка объявлена как:

app/code/local/Abc/HelloWorld

Вы должны изменить его на:

app/code/local/Abc/Helloworld

И соответственно измените свои классы.

 1
Author: Raphael at Digital Pianism, 2016-06-20 09:03:27