gpt4 book ai didi

magento - magento如何调用这个注释方法

转载 作者:行者123 更新时间:2023-12-02 11:03:36 24 4
gpt4 key购买 nike

我正在学习 Magento,遇到了这个问题。

模板文件代码

    <?php $testimonials = $this->getTestimonials(); ?>
<?php $i = 0;?>
<?php if ($testimonials->count() > 0): ?>
<div class="block testimonials_sidebar">
<div class="block-title">
<strong><span><?php echo $this->__('Testimonials') ?></span></strong>
</div>
<div class="block-content">
<?php foreach ($testimonials as $testimonial): ?>
<div class="testimonial_sidebar_box">
<div class="testimonial_sidebar_text"><?php echo $testimonial->getTestimonialText(); ?></div>
<div class="testimonial_sidebar_name"><?php echo $testimonial->getTestimonialName(); ?></div>
</div>
<?php endforeach; ?>
<div class="actions">
<a href="<?php echo $this->getUrl('testimonials'); ?>"><?php echo $this->__('View All Testimonials'); ?></a>
</div>
</div>
</div>
<?php endif;?>

当我去阻止查看模板文件中的第一行代码时

 <?php $testimonials = $this->getTestimonials(); ?>

我找不到在该 block 类中声明的这个方法,相反我可以在注释部分看到这个方法。但此方法尚未在模块中的任何位置声明。这是怎么发生的?下面的 block 类代码。

/**
* Frontend block for testimonials
*
* @method Turnkeye_Testimonial_Model_Mysql4_Testimonial_Collection getTestimonials()
*/
class Turnkeye_Testimonial_Block_Testimonial extends Mage_Core_Block_Template
{

/**
* Before rendering html, but after trying to load cache
*
* @return Turnkeye_Testimonial_Block_Testimonial
*/
protected function _beforeToHtml()
{
$this->_prepareCollection();
return parent::_beforeToHtml();
}

/**
* Prepare testimonial collection object
*
* @return Turnkeye_Testimonial_Block_Testimonial
*/
protected function _prepareCollection()
{
/* @var $collection Turnkeye_Testimonial_Model_Mysql4_Testimonial_Collection */
$collection = Mage::getModel("turnkeye_testimonial/testimonial")->getCollection();
if ($this->getSidebar()){
$collection->addFieldToFilter('testimonial_sidebar', '1');
}

$collection->setOrder('testimonial_position', 'ASC')
->load();
$this->setTestimonials($collection);
return $this;
}

}

如果我按住 Ctrl 键单击模板文件中的该方法,它会将我带到注释中的该方法。我可以看到它指向集合,所以这是我的集合代码。

class Turnkeye_Testimonial_Model_Mysql4_Testimonial_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{

/**
* Initialization here
*
*/
public function _construct()
{
parent::_construct();
$this->_init('turnkeye_testimonial/testimonial');
}

}

最佳答案

Magento 使用神奇的 __call() 方法为 Magento 对象中的私有(private)(隐藏)数据动态“创建”访问器方法。

Magento 中的大多数类都继承自 Varien_Object,其中定义了神奇的 __call() 方法。

如果您想了解有关 PHP 中神奇的 __call() 函数的更多信息,您可以在这里阅读:http://www.php.net/manual/en/language.oop5.overloading.php#object.call .

其他魔法方法可以在这里找到:http://www.php.net/manual/en/language.oop5.magic.php 。 (与__call()类似的是魔术方法__get()__set())。

我发现一篇文章解释了这一切在 Magento 中的工作原理:http://codemagento.com/2011/02/where-are-my-getters-and-setters/ .

您看到的以 @method 开头的注释行是对文档生成器、IDE 和您的提示,虽然代码中未定义此方法,但应该可以访问它通过神奇的 __call() 方法。如果您使用的是 Netbeans 或 Eclipse 等 IDE,则应该获得该方法的代码完成。

关于magento - magento如何调用这个注释方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12700852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com