1

2つの類似したカスタムモジュールを変更して、それらを1つのカスタムモジュールに結合しようとしています。ただし、これらのモジュールは両方とも<routers>confix.xmlのタグを使用します。私はこれを行う方法を探して探しましたが、運がありません。

例えば:

カスタムモジュール1

<admin>
    <routers>
        <Namespace_Module1>
             <use>admin</use>
            <args>
                <module>Namespace_Module1</module>
                <frontName>frontname</frontName>
            </args>
        </Namespace_Module1>
    </routers>
</admin>

カスタムモジュール2

<admin>
    <routers>
        <Namespace_Module1>
             <use>admin</use>
            <args>
                <module>Namespace_Module2</module>
                <frontName>namefront</frontName>
            </args>
        </Namespace_Module2>
    </routers>
</admin>

これが、2つの類似したモジュールを組み合わせることができない唯一の理由だと思います。これはできますか?もしそうなら、どのように(例)?

4

2 に答える 2

4

あなたが何を達成しようとしているのか完全にはわかりません。1つのモジュール内から定義された2つの異なるルーター、つまり2つの異なるフロントネームを探していますか?もしそうなら、読んでください-そうでなければ、もう少し明確にしてください。

まず、カスタムモジュール2で提供したxmlにタグの不一致があります。-で開い<Namespace_Module1>たり閉じたりし</Namespace_Module2>ているため、現状では、このコードは機能しません。

次に、ルーターを定義するには、<routers>タグを使用する必要があります。これで問題は発生しません。ただし、その直下のノードは一意である必要があります。

したがって、私があなたの質問を正しく読み、これら2つのルーターノードをマージしたいが、それでも2つの異なるフロント名があると仮定すると、次のように機能します。

<admin>
    <routers>
        <namespace_module1>
            <use>admin</use>
            <args>
                <module>Namespace_Module1</module>
                <frontName>frontname</frontName>
            </args>
        </namespace_module1>
        <namespace_module2>
             <use>admin</use>
            <args>
                <module>Namespace_Module2</module>
                <frontName>namefront</frontName>
            </args>
        </namespace_module2>
    </routers>
</admin>

ただし、これらを別々のルーターにする必要があるという特別な理由がある場合は、より良い代替手段として次のものを提供します。単一のルーターを使用しますが、複数のコントローラーを使用します。したがって、xmlは次のようになります。

<admin>
    <routers>
        <namespace_module>
            <use>admin</use>
            <args>
                <module>Namespace_Module</module>
                <frontName>frontname</frontName>
            </args>
        </namespace_module>
    </routers>
</admin>

モジュールコントローラディレクトリに、たとえばModule1Controller.phpとの2つのコントローラを作成しますModule2Controller.php

/frontname/module1/そうすれば、とを介してそれら(インデックスアクション)にアクセスできるようになります/frontname/module2

これは、はるかにクリーンなソリューションのように感じます。

于 2012-06-11T21:34:40.883 に答える
0

私が理解しているように、あなたは1つのfrontNameを介して2つのモジュールのコントローラーを一致させようとしています。

これは、2番目のモジュールで「modules」ノードを使用することで完全に可能です。最初のモジュールの構成を保持しますが、2番目のモジュールにはこれを使用します。

<admin>
    <routers>
        <Namespace_Module1>
            <args>
                <modules>
                    <Namespace_Module2>Namespace_Module2</Namespace_Module2>
                </modules>
            </args>
        </Namespace_Module1>
    </routers>
</admin>

'use'または'frontName'を指定する必要はありません。これらのXMLファイルはとにかくマージされます。Magentoは、最初に最初のモジュールで一致するコントローラーを見つけようとし、次に2番目のモジュールで見つけようとします。

于 2012-06-12T07:24:55.023 に答える