我有一个类,它扩展了我需要覆盖的类,但我需要调用该类的父类.因为我不能打电话给super因为那将执行直接父母什么是获得我父类的父母的最佳方式?
我确信这是一个基本问题,但是我已经做了一段时间了.
class A
{
public void myMethod()
{ /* ... */ }
}
class B extends A
{
public void myMethod()
{ /* Another code */ }
}
class C extends B
{
I need to call Class A here
{ /* Another code */ }
}
Run Code Online (Sandbox Code Playgroud) 所以缓存当然是让我在Magento中最让我困惑的事情,就像我对其他大多数人一样.目前我们工作的网站之一是企业版,当然也使用FPC.问题是,我们有一个每15分钟运行一次的库存更新.通过电话向CSR公司下达了大量订单,并通过目录将订单发送到Magento以外的外部系统.
每15分钟运行一次脚本来检查该系统中的任何库存,看它是否与Magento中的库存不同.如果存在差异,则在Magento中更新库存.使用所有Magento方法,没有sql或类似的东西.
我们一直有缓存问题,并在它们问世时尝试了所有最新技术.我们正在尝试的最新版本是Redis,我们在其他网站上取得了很好的成功.但是,我们仍然看到服务器上出现了疯狂的负载,很明显页面没有被缓存.
在深入研究代码之后,似乎在每个模型保存或管理产品控制器保存后,它会查看是否需要使缓存无效.似乎更改任何属性,至少库存将标记FPC需要失效.
我对失效意味着什么感到困惑,因为不久前我们向客户支持提出了类似问题的问题,这就是回应
即使在销售后库存减少,整页缓存也会在产品,类别,CMS发生任何变化时达到无效状态.
现在,当整页缓存达到无效状态时,这并不意味着您的前端发生了某些变化,但是在上次刷新之后应用的任何更改都不会显示在前端.
但是,如果您的业务逻辑必须始终验证FPC,那么您当然可以设置Magento安装,以便根据需要通过cron功能自动刷新它.
但是,在我所做的所有测试中,在1.9和1.11 Enterprise上,当FPC无效时,会显示响应未从缓存中提取.这与他们所说的只是没有更新的更新是矛盾的.
有什么我想念的吗?有没有人能够很好地解释Magento中的失效如何专门用于FPC或任何良好的链接以完全理解过程和代码?
您可以自己尝试任何整页缓存的页面.但它是我的理解,该方法processRequest中/app/code/core/Mage/Core/Model/Cache.php应该设置的主体内容与缓存的响应,如果页面缓存返回true.
要测试转到任何页面,请确保将其缓存并返回true.在我们的案例数量中,进入并编辑产品.这将使FPC无效.但是现在当您加载缓存的页面之前,它将在此方法中返回false而不是缓存页面.我不知道这是否准确无法判断页面是否被缓存,但这是我的调查引导我的地方.如果我错了,请纠正我.
更新:经过进一步调查,我发现当您在管理员中保存产品时,控制器操作
Mage_Adminhtml_Catalog_ProductController::saveAction()
将调用以下方法
Mage::getModel('catalogrule/rule')->applyAllRulesToProduct($productId)
然后在Mage_CatalogRule_Model_Resource_Rule类applyAllRulesForDateRange中调用该方法并触发该事件
catalogrule_after_apply
整页缓存模块正在观察并触发FPC标记的干净缓存方法.基本上删除所有FPC缓存记录.
如果之前的逻辑是清除与产品和类别标签绑定的FPC记录,我不明白为什么这是必要的.这是一个错误吗?
我正在开发一个项目,其中某人检查了一些文件夹和文件,这些文件夹和文件不在存储库中,并且假设在我们的本地,我尝试通过以下命令删除它们并且它给了我这个错误
svn delete filename --keep-local
svn: invalid option: --keep-local
Run Code Online (Sandbox Code Playgroud) 基本上我有一个PHP类,我想从命令行测试并运行某种方法.我确信这是一个基本问题,但我遗漏了文档中的内容.我知道如何运行文件,显然php -f但不确定如何运行该文件是一个类并执行给定的方法
我有点了解Magento中的索引是如何工作的,但我还没有看到任何关于此的好文档.我想知道以下内容.
我认为拥有这些信息对我船上的其他人来说非常有用,而这些信息并没有完全得到索引过程.
更新:在我的问题评论和Ankur的回答之后,我想我错过了一些关于正常数据库索引的知识.那么这只是Magento处理索引的版本,对我来说,更好的方法是在数据库索引方面得到我的答案,例如这里的链接数据库索引如何工作?
我在结帐时有一些代码,我在会话中设置了一个密钥,如果在结帐时将该密钥设置为false,我需要将它们发送回结算页面.我有它的代码,但我也不能拥有通常在观察者之后运行的任何代码,因为它会调用第三方服务并因为会话中缺少此密钥而返回错误
这是我的代码,我有我想要的一切,但我需要立即发生的响应,并且在调度的事件行被发送后只发送回发送回浏览器的响应.
public function checkForOrdKey(Varien_Event_Observer $observer)
{
$controllerAction = $observer->getControllerAction();
$request = $controllerAction->getRequest();
$controllerName = $request->getControllerName();
$stepData = $this->_getCheckoutSession()->getStepData();
$ordKeyRemoved = $this->_getCheckoutSession()->getOrdKeyRemoved();
// if it is the checkout onepage controller or inventory controller don't do anything
if (isset($controllerName) && $controllerName === "onepage" && $stepData['shipping']['complete'] && $ordKeyRemoved) {
$this->_getCheckoutSession()->setStepData('shipping', 'complete', false);
$result['goto_section'] = 'billing';
Mage::app()->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
$this->_getCheckoutSession()->setOrdKeyRemoved(false);
}
}
Run Code Online (Sandbox Code Playgroud) 因此,在我们最近的一次发布中,我们观察到了很多事件,例如controller_action_predispatch.一旦网站上线,我们就开始注意到我们的观察者从未被人们召集过.经过一番调查后,我们的一位开发人员在第292行的Mage_Core_Model_App中找到了这段代码
if ($this->_cache->processRequest()) {
$this->getResponse()->sendResponse();
} else {
$this->_initModules();
$this->loadAreaPart(Mage_Core_Model_App_Area::AREA_GLOBAL, Mage_Core_Model_App_Area::PART_EVENTS);
if ($this->_config->isLocalConfigLoaded()) {
$this->_initCurrentStore($scopeCode, $scopeType);
$this->_initRequest();
Mage_Core_Model_Resource_Setup::applyAllDataUpdates();
}
$this->getFrontController()->dispatch();
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的那样,$ this - > _ cache-> processRequest()是真的,当启用整页缓存时,您永远不会进入调度.开发人员确实找到了http_response_send_before,它可以通过任何方式进行调用,但在我看来,这是一个错误,或者如果您启用了完整页面缓存,则不应该使用这些控制器调度事件.有什么想法吗?
我一直在想这个问题.如果Magento编写了一个核心Observer类并执行了一个你不希望它执行的功能,或者你想要重写它,该怎么办?有没有办法说,不要在Observer中使用此方法,只需使用我的.如果我为自己的Observer设置一个方法,它不会只是首先执行核心功能,然后是我实现的任何内容吗?
例如,Magento希望在Observer方法中将一些数据保存到数据库中,但我不希望它保存该数据,我希望它保存一些其他数据,我已将列或属性添加到数据库中.
我们在Magento平台上工作,我们的前端开发人员都在同一个CSS样式表上工作.此样式表附带了许多现有样式.大多数时候,我告诉他们在底部放置任何其他样式,以便更容易合并和一切.当您希望将某些样式与样式表中已存在的选择器放在一起时,这并不总是有效.
我们似乎在开发人员没有正确管理冲突和覆盖其他人的代码方面遇到很多问题.显然,当你知道其他人已完成文件以减少冲突的可能性时,它总是最好尝试处理文件,但显然如果有一个以上的开发人员在网站上工作并且只有一个CSS文件会遇到很多冲突.
我正在寻找其他人管理此方法的方法以及如何最大限度地减少这些开发人员所具有的冲突数量的一些想法.
如果您已经培训了一个新的Magento开发人员,那么您提供的任何虚假任务都是如此.除了阅读所有文章并做示例之外,我正在寻找一些想法,让开发人员在阅读尽可能多的关于Magento之后继续工作,而无需实际完成任务.
如果有人有任何好的想法请告诉我,你甚至可以发布一些可能答案的好的代码片段,什么不是.如果我们得到很多好的答案,这可能是一个很好的线索,因为我们的技术人员在这里负责培训.
它们可能是前端设计模板或构建模块,它并不重要.如果有人发布了一个非常好的例子,我会将那个标记为答案.
不确定这是否适合Stackoverflow,但不确定将其放在哪里可以回答质量响应.