Php 在Magento中扩展/覆盖扩展
我安装了一个扩展,我想从我的模块中使用它的功能性。该分机中的postAction是所有发生的地方。它使用youtube API检索视频信息,并将其保存在Magento EAV数据模型的多个表中 我已经创建了一个功能模块来测试youtube API函数,只需使用一个按钮和一个文本框来发送一些搜索词。但是现在我想使用扩展函数自动地进行调用并填充必要的表,而不是从代码中手动完成所有操作 所以我需要(或想要?或必须?)设置对该postAction的呼叫,或扩展或覆盖它。我在这里迷路了,我是Magento和PHP的新手,所以我不清楚该怎么做 这是我想调用的类:Php 在Magento中扩展/覆盖扩展,php,class,magento,magento-1.7,Php,Class,Magento,Magento 1.7,我安装了一个扩展,我想从我的模块中使用它的功能性。该分机中的postAction是所有发生的地方。它使用youtube API检索视频信息,并将其保存在Magento EAV数据模型的多个表中 我已经创建了一个功能模块来测试youtube API函数,只需使用一个按钮和一个文本框来发送一些搜索词。但是现在我想使用扩展函数自动地进行调用并填充必要的表,而不是从代码中手动完成所有操作 所以我需要(或想要?或必须?)设置对该postAction的呼叫,或扩展或覆盖它。我在这里迷路了,我是Magento
/**
* 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());
....
}
我已经阅读了这些链接上的信息,但我不清楚我到底要做什么。是否遵循观察者
模式?也许只是自己创建一个post
调用,然后以某种方式添加$data
结构,以便在调用中使用它?谢谢
printVideoEntry
是从另一个函数调用的,该函数位于一个for-each函数中,该函数现在遍历目录中的前3个产品
<?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);
}
}
要给出一个明确的答案并不容易。。。这个问题并不清楚,因为我们不知道youtube扩展是如何工作的。(密码是加密的还是打开的?) 调用控制器的操作 如果只想调用postAction,可以使用重定向($path,$arguments=array())方法。(在
Mage/Core/Controller/Varien/Action.php
中定义)
$path
定义为“moduleName/controllerName”$arguments=array()
被定义为耦合参数name=>Value李>
Ex.
$this->_redirect('checkout/cart', array('Pname' => $pValue, ... );
只有当您从控制器调用它时,它才会工作
您可以在此处找到有关_重定向的更多信息:
如果要从模型或控制器的任何不同文件执行重定向,则需要以以下方式调用url:
Mage::app()->getResponse()->setRedirect(Mage::getUrl($path, $arguments=array()));
因此,上述示例becames:
Mage::app()->getResponse()->setRedirect(Mage::getUrl('checkout/cart', array('Pname' => $pValue, ... ));
观察者
使用观察者意味着向您的模块(观察者)添加一个新模型,并在该类中编写一个在特定事件下执行操作的方法,您可能希望调用yt扩展的某个模型/方法
然后,您必须在config.xml中声明这些内容,将您的observer方法绑定到某个事件(任何预定义的,即使是在Magento中也适合您,或者如果需要,您应该创建自己的重写Magento类…)
观察员示例
- PackageName/ModuleName/Model/Observer.php
- PackageName/ModuleName/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> ....
.... 独生子女 包装名称模块名称模型观察者 myActionMethod ....
EventName
和所有假名称
最困难的是找到适合你的活动。。。
每次在magento代码中看到类似于Mage::dispatchEvent('EventName',Parameters)的内容时代码>这是一个事件
您可以找到默认Magento事件的列表
我希望它能帮助您扩展模块类
class AW_Vidtest_YoutubeController extends Mage_Core_Controller_Front_Action {
.....
}
范例
类AW1_Vidtest1_YouTube控制器1扩展了AW_Vidtest_YouTube控制器{
.....
}
在哪里
AW1_Vidtest1_YoutubeController1 AW1是命名空间Vidtest1是您的模块名YoutubeController1是您希望post操作使用的控制器
希望它对您有用您希望使用的YouTube API扩展是什么?我下载了,它的工作没有任何抱怨。但我想要的是使用它的功能,这样我就可以使用新视频自动更新产品的视频属性,而无需用户干预。使用事件观察者而不是重写其类有什么用?视频证明代码是开放的,所以我可以毫无问题地看一看。我再次检查了,看看我是否可以使用这种方法。我会尝试看看你的建议是否也符合我的需要。嗯…一句话:我想从我的代码中重用扩展上的postAction,以避免在扩展代码或数据库表更改时重复代码和将来的bug。操作与控制器相关,所以它们是URL。。。如果要调用操作,必须使用重定向方法调用url:$this->\u redirect('moduleName/controllerName')代码>例如,$this->_重定向('checkout/cart')
重定向
似乎很有用。如何填写通过post
操作传递的数据?在本例中,数据是youtube url、标题和用户名称(在本例中,它可以是任何内容,因为此过程将使用cron作业自动运行)测试…但我有一个错误,当使用重定向调用扩展模块时,因为我在模块上,它抛出一个错误无效方法
。我想我应该在类的某个地方添加include
,或者修改配置(或其他文件?),以便能够从模块中调用扩展名,对吗?如果是,那么你能提供一个样本或链接到哪里去查看吗?我现在要做一个搜索。。。也许这会有所帮助?看来最终的解决方案是使用观察者模式的扩展。
class AW_Vidtest_YoutubeController extends Mage_Core_Controller_Front_Action {
.....
}