1

拡張機能がインストールされており、モジュールからその機能を使用したいと考えています。その拡張機能の postAction ですべてが行われます。YouTube API を使用してビデオ情報を取得し、Magento EAV データ モデルの複数のテーブルに保存します。

ボタンとテキストボックスを使用して検索語を送信するだけで、YouTube API 関数をテストするために作成した機能モジュールが既にあります。しかし今は、コードから手動ですべてを行うのではなく、拡張機能を使用してその呼び出しを行い、必要なテーブルに入力することを自動的に行いたいと考えています。

そのため、その postAction への呼び出しをセットアップするか、それを拡張またはオーバーライドする必要があります (または、したいですか? またはしなければなりませんか?)。ここで迷子になりました。Magento と PHP は初めてなので、何をすべきか明確にわかりません。

これは私が呼び出したいクラスです:

/**
 * Youtube Upload Controller
 */
class AW_Vidtest_YoutubeController extends Mage_Core_Controller_Front_Action {
.....
}

そしてその中に postAction 関数があります:

/**
 * Get customer video
 */
public function postAction() {
    $data = new Varien_Object($this->getRequest()->getPost());
....
}

これらのリンクの情報を読みましたが、正確に何をしなければならないのか明確ではありません。Observerパターンに従いますか?たぶんpost、自分で呼び出しを作成し、何らかの方法で$data構造を追加して、呼び出しで使用できるようにしますか? ありがとう

編集済み: これは私が今まで持っていたコードで、@Francesco による提案があります。この関数printVideoEntryは、カタログの最初の 3 つの製品を処理する for each 内の他の関数から呼び出されます。

<?php
class Dts_Videotestimonials_Model_SearchVideo extends Mage_Core_Model_Abstract
{
    public $search_term;
    private $productModel;

    function printVideoEntry($videoEntry, $_product, $tabs = "")
    {
        # get user data
        $user = Mage::getSingleton('admin/session');
        $userName = $user->getUser()->getFirstname();
        $userEmail = $user->getUser()->getEmail();
        $data = array(
            "ProductId" => $_product->getId(),
                        "AuthorEmail" => $userEmail,
                        "AuthorName" => $userName,
                        "VideoLink" => $videoEntry->getVideoWatchPageUrl(),
                        "VideoType"  => "link",
                        "Title" => $videoEntry->getVideoTitle(),
                        "Comment" => "this is a comment"
        );
        $actionUrl = Mage::getUrl('vidtest/youtube/post');
        Mage::app()->getResponse()->setRedirect($actionUrl, $data);
    }
}
4

2 に答える 2

1

モジュールクラスを拡張してみてください

class AW_Vidtest_YoutubeController extends Mage_Core_Controller_Front_Action {
.....
}

サンプルクラスAW1_Vidtest1_YoutubeController1extendsAW_Vidtest_YoutubeController {.....}

ここで、AW1_Vidtest1_YoutubeController1 Aw1は名前空間です。Vidtest1はモジュール名です。YoutubeController1は、ポストアクションで使用するコントローラーです。

それがあなたのために働くことを願っています

于 2012-09-03T10:51:08.740 に答える
1

明確な答えを出すのは簡単ではありません... YouTube 拡張機能がどのように機能するかがわからないため、質問は明確ではありません。(コードは暗号化されているか、公開されていますか?)

コントローラーのアクションを呼び出す

postAction を呼び出すだけの場合は、_redirect($path, $arguments=array())メソッドを使用できます。( で定義Mage/Core/Controller/Varien/Action.php)

  1. $path「moduleName/controllerName」として定義されています
  2. $arguments=array()対 parameterName => Value として定義されます。

元。

$this->_redirect('checkout/cart', array('Pname' => $pValue, ... );

これは、コントローラーから呼び出した場合にのみ機能します...

ここで _redirect に関する詳細情報を見つけることができます: + または / を持つパラメーターを使用した magento _redirect

モデルまたは別のファイル フォームからコントローラーにリダイレクトする場合は、次の方法で URL を呼び出す必要があります。

Mage::app()->getResponse()->setRedirect(Mage::getUrl($path, $arguments=array()));

だから上記の例。は次のようになります:

Mage::app()->getResponse()->setRedirect(Mage::getUrl('checkout/cart', array('Pname' => $pValue, ... ));

観察者

オブザーバーを使用するということは、新しいモデルをモジュール ( オブザーバー ) に追加し、このクラス内に特定のイベントでアクションを実行するメソッドを記述することを意味します。おそらく、yt 拡張機能のモデル/メソッドを呼び出す必要があります。

次に、オブザーバー メソッドをいくつかのイベントにバインドする config.xml でこの内容を宣言する必要があります (Magento でも定義済みで、必要に応じて、magento クラスを独自に書き換える必要があります ...)

オブザーバーの例

  • パッケージ名/モジュール名/モデル/Observer.php

    class PackageName_ModuleName_Model_Observer {
    
        public function myActionMethod(Varien_Event_Observer $observer) {
    
            // Code ... 
            // just a very indicative example
            $model = Mage::getModel('youtubeExtension/Model....').method();
    
        }
    
    }
    
  • パッケージ名/モジュール名/etc/config.xml

    <config>
    ....
    <global>
        <events>
            <EventName>
                <observers>
                    <moduleName_observer>
                        <type>singleton</type>
                        <class>PackageName_ModuleName_Model_Observer</class>
                        <method>myActionMethod</method>
                    </moduleName_observer>                         
                </observers>
            </EventName>
        </events>
    </global>
    ....
    

EventNameパッケージ/モジュール/メソッド名に従って明らかに変更し、すべての偽の名前

最も難しいのは、自分に合った適切なイベントを見つけることです... Magento コードでMage::dispatchEvent('EventName', Parameters); このようなものを見るたびに、イベントです。

ここでデフォルトの Magento イベントのリストを見つけることができます

お役に立てば幸いです

于 2012-09-03T09:46:19.337 に答える