Я новичок на PHP; сегодня я вижу в Magento top.phtml
некоторый код.
<?php $_menu = $this->renderCategoriesMenuHtml(0,'level-top') ?> <?php if($_menu): ?> <div class="nav-container"> <ul id="nav"> <!--NEW HOME LINK --> <li class="home"><a href="<?php echo $this->getUrl('') ?>"><?php echo $this->__('Home') ?></a>"</li> <!--NEW HOME LINK --> <?php echo $_menu ?> </ul> </div> <?php endif ?>
Я знаю, что $this
– это сам class
, он используется только в классе для ссылки на метод или свойство, в приведенном выше коде, нет класса, который был определен, почему он может напрямую использовать это ключевое слово? Что означает $this->__('Home')
?
Поскольку вы отметили этот Mage_Catalog_Block_Navigation
вас, вероятно, есть класс Mage_Catalog_Block_Navigation
. По крайней мере, методы намекают на это. Теперь у меня нет никакой информации о Magento, но этот класс простирается от Mage_Core_Block_Template
и в этом классе у вас есть метод fetchView
, который в какой-то момент делает
include $includeFilePath;
Когда вы include
код внутри метода, у вас есть доступ к $this
во включенном коде файла, потому что он оценивается в области этого экземпляра:
Когда файл включен, код, который он содержит, наследует область изменения строки, в которой происходит включение. Любые переменные, доступные в этой строке в вызывающем файле, будут доступны в вызываемом файле с этой точки вперед. Однако все функции и классы, определенные во включенном файле, имеют глобальную область видимости.
Общий пример:
class Template … public function render($templateFile) { include $templateFile; } public function ___($stringToTranslate) { // translates $stringToTranslate somehow } }
Обратите внимание, что « $this
is not the self
of the class» является лишь частично правильным. self
также является ключевым словом и php, но в то время как self
действительно относится к классу, $this
относится к экземпляру класса.
Объект определен! Этот шаблон используется как экземпляр блока. Это тот экземпляр, который упоминается в шаблоне. Быстрый способ определить класс, с которым вы сейчас работаете внутри шаблона, – использовать следующую строку кода в шаблоне:
<?php echo get_class($this); ?>
Кроме того, вы __
метод __
. Это перехватывает локальную систему Magento. Это означает, что вы могли бы написать:
<?php echo $this->__('Hello') ?>
В своем шаблоне используйте один и тот же файл шаблона во французском магазине и только для того, чтобы создавать текстовое сопоставление с английского языка на французский, вместо создания совершенно нового шаблона.
Потому что это шаблон для некоторого блочного класса. Шаблон блока (файл .phtml
) включен внутри Mage_Core_Block_Template
класса fetchView()
. Вы можете перейти к app/code/core/Mage/Core/Block/Template.php
и посмотреть, как это делается. Вот почему $this
доступно в .phtml
. Вы можете больше узнать о блоке и шаблонах пурпурного цвета в этой статье Алана Шторма . Он немного устарел, но основные объясняются очень хорошо (imho).