我们在这里建立了一个很好的Magento专家社区.我很好奇Magento的扩展和其他软件工具(IDE,编辑等)每个人都在用它们来帮助他们的开发项目?
免费和商业工具都非常受欢迎.
Magento,恕我直言,代表了一个基于深思熟虑的编码原则的PHP系统 - 可重用的设计模式就是其中之一.就PHP系统的一个例子而言,我认为它可以被认为是非常前沿的,因此从架构的角度来看值得考虑.
据我了解,OOP开发人员可以使用许多设计模式.看到在Magento这样的开源系统中使用的这些模式允许开发人员在实际使用和原位查看这些模式的示例,而不是在有时可能相当麻烦,甚至有点误导的示例中.
因此,我想知道除了下面列出的模式之外,Magento程序员在为Magento开发时使用了哪些模式.
作为一个注释,我理解这些模式中的一些是由于构建在Zend框架上的结果,MVC /前端控制器是其中的几个,
显而易见的是:
厂:
$product = Mage::getModel('catalog/product');
Run Code Online (Sandbox Code Playgroud)
辛格尔顿:
$category = Mage::getSingleton('catalog/session');
Run Code Online (Sandbox Code Playgroud)
注册地:
$currentCategory = Mage::registry('current_category');
Run Code Online (Sandbox Code Playgroud) 是否可以在Drupal模块中创建自己的钩子以供其他Drupal模块使用?如果没有,Drupal中是否有一个机制可供第三方开发人员提供钩子?如果到目前为止一切都没有,核心中的钩子列表实现了什么?
据我所知,Drupal模块可以处理类似系统的事件,称为钩子.创建新模块时,可以创建实现钩子的函数.例如,有一个hook_delete钩子.如果在模块中实现了一个功能
function mymodule_delete($node)
{
}
Run Code Online (Sandbox Code Playgroud)
删除节点时将调用此函数.
我想知道的是,作为第三方模块开发人员,有没有办法创建我自己的钩子.比方说,hook_alanskickbutthook其他模块开发人员可以订阅这个钩子.
如果可以,你怎么做?我查看了官方文档并且在那里找不到多少,当我开始探索Drupal源代码时,我仍然感到有些晕眩(我理解递归,但是没有花太多时间考虑递归问题).我们欢迎完整的解决方案,但我很高兴能够指出正确的方向.
当使用程序员文本编辑器vi时,我经常使用通配符搜索对我想编辑的文件很懒惰
vi ThisIsAReallLongFi*.txt
Run Code Online (Sandbox Code Playgroud)
当这匹配单个文件时,它工作得很好.但是,如果它匹配多个文件vi做了一些奇怪的事情.
首先,它打开第一个文件进行编辑
第二,当我:wq退出文件时,我得到一条消息,终端的底部看起来像这样
E173: 4 more files to edit
Hit ENTER or type command to continue
Run Code Online (Sandbox Code Playgroud)
当我按下回车键时,它会返回我刚刚进入的文件中的编辑模式.我期望的行为是vi会转到下一个要编辑的文件.
所以,
这里vi的行为背后的逻辑是什么?
有没有办法继续并编辑匹配的下一个文件?
是的,我知道标签完成,这个问题是基于好奇心,并希望更好地理解shell.
深入探讨Magento内部,而不是寻找具体问题的解决方案,只是试图了解一些实现细节.
当您在Magento中创建可配置产品,然后创建子简单产品以实现衬衫大小,颜色等内容时,Magento将此关系存储在两个单独的表中.
catalog_product_relation
catalog_product_superlink_table
Run Code Online (Sandbox Code Playgroud)
为什么这些关系存储了两次?
这是遗留代码,还是产品关系链接和产品"超链接"链接之间存在语义差异?
系统是否期望它们相同,或者这些表是否代表不同的父/子关系是有效的对象状态?
什么函数或位代码作为PHP本身源代码中执行/解释PHP程序的主要入口点?基于我在Google书目中搜索或阅读的内容,我知道PHP旨在与某种服务器一起工作(即使CLI命令通过启动"命令行SAPI"工作,它充当了设计的迷你服务器处理单个请求),服务器将要求PHP执行程序.
我知道minit和rinit生命周期函数,它们作为PHP扩展的入口点.
我不知道的是PHP源代码与自己进行这种对话的位置
嘿看,这个文件/字符串中有一个PHP程序.我应该跑它
我不想在这里完成任何具体任务.我试图理解PHP的内部如何完成它的工作,并找到一个主要的入口点,我可以开始执行它.
什么是jQuery喜欢和/或最佳实践方式来获取jQuery(或一般的浏览器javascript)中的事件的原始目标.
我一直在用这样的东西
$('body').bind('click', function(e){
//depending on the browser, either srcElement or
//originalTarget will be populated with the first
//element that intercepted the click before it bubbled up
var originalElement = e.srcElement;
if(!originalElement){originalElement=e.originalTarget;}
});
Run Code Online (Sandbox Code Playgroud)
哪个有效,但我对两线功能嗅探并不满意.有没有更好的办法?
我在PHP中使用Reflection API从方法中提取DocComment(PHPDoc)字符串
$r = new ReflectionMethod($object);
$comment = $r->getDocComment();
Run Code Online (Sandbox Code Playgroud)
这将返回一个类似于此的字符串(取决于方法记录的程度)
/**
* Does this great things
*
* @param string $thing
* @return Some_Great_Thing
*/
Run Code Online (Sandbox Code Playgroud)
是否有任何可以将PHP Doc Comment String解析为数据结构的内置方法或函数?
$object = some_magic_function_or_method($comment_string);
echo 'Returns a: ', $object->return;
Run Code Online (Sandbox Code Playgroud)
缺乏这一点,我应该看看PHPDoc源代码的哪一部分.
缺乏和/或除此之外,是否有第三方代码被认为是"更好"的PHPDoc代码?
我意识到解析这些字符串不是火箭科学,甚至不是计算机科学,但我更喜欢一个经过良好测试的库/例程/方法,它是为了处理许多janky,半非正确的PHP Doc代码而构建的.可能存在于野外.
当您install或update具有作曲家的项目时,您可以告诉它使用--no-dev标志跳过与开发相关的依赖项(测试,构建工具等)
composer.phar update --no-dev
Run Code Online (Sandbox Code Playgroud)
如果没有此标志,composer将始终下载额外的依赖项.
是否有任何方式(以编程方式或其他方式)告诉作曲家总是跳过开发依赖项?也就是说,是否存在与伪代码匹配的真实代码
//File: composer.json
//...
"no-dev":"true"
//...
Run Code Online (Sandbox Code Playgroud)