Heyo, работающий над магической темой на некоторое время (... и мое понимание системы медленно, но неуклонно растет). Мне нужно начать работу над некоторыми пользовательскими модулями в ближайшее время, и поэтому я начинаю с этого небольшого проекта, чтобы получить мои ориентиры:Magento - структура пользовательского модуля
Я нашел немного кода для управления конкретной задачей, которую я копировал и вставлял в файлы шаблонов:
<?php
$ids = $_product->getCategoryIds();
$cat = Mage::getModel('catalog/category')->load($ids[0]);
$isFF = false;
foreach ($ids as $key=>$val) {
$cat = Mage::getModel('catalog/category')->load($val);
$name = $cat->getName();
if ($name === 'Fast Fulfillment') {
$isFF = true;
}
}
if ($isFF) { echo '<span class="ff-logo"></span>'; }
?>
Очень простой. Я просто проверяю, есть ли продукт в определенной категории и создает элемент, если он есть. (Я знаю, что есть около 5 твердых способов сделать это ... это та, с которой я пошел).
Мне нужно проверить это каждый раз, когда отображается блок продукта, и до сих пор он копировал этот код, чтобы он работал. Он работает, но работает обратно (я не должен вводить логику в слой представления).
Ok - так, давайте создадим простой модуль для обмена функциональность:
местные/WACI/ProductFlag/и т.д./config.xml
<config>
<modules>
<WACI_ProductFlag>
<version>0.1.0</version>
</WACI_ProductFlag>
</modules>
<global>
<blocks>
<WACI_ProductFlag>
<class>WACI_ProductFlag_Block_View</class>
</WACI_ProductFlag>
</blocks>
</global>
</config>
и т.д./модули/WACI_All.xml
<config>
<modules>
<WACI_CustomPageLayouts>
<codePool>local</codePool>
<active>true</active>
</WACI_CustomPageLayouts>
</modules>
<modules>
<WACI_ProductFlag>
<codePool>local</codePool>
<active>true</active>
</WACI_ProductFlag>
</modules>
</config>
Теперь, для класса ... Я не совсем уверен, что если Block
о r a Helper
подходит. Я пошел с Block
, но - idk ... Я, вероятно, ошибаюсь (учебники для этого материала сильно отличаются).
местный/WACI/ProductFlag/Block/view.php
<?php
/**
* WACI
*
* @codepool Local
* @category View
* @package WACI
* @module ProductFlag
*/
class WACI_ProductFlag_Block_View extends Mage_Core_Block_Template
{
private $_focus;
private $_isFF = false;
public function getIsFF($product){
$this->_focus = "FF";
$isFF = false;
$ids = $product->getCategoryIds();
$cat = Mage::getModel('catalog/category')->load($ids[0]);
foreach ($ids as $key=>$val) {
$cat = Mage::getModel('catalog/category')->load($val);
$name = $cat->getName();
if ($name === 'Fast Fulfillment') {
$isFF = true;
}
}
}
protected function _toHtml(){
$html = parent::_toHtml();
if ($this->_focus === "FF") {
if ($this->_isFF){
$html .= '<span class="ff-logo"></span>';
}
}
return $html;
}
}
?>
Надеюсь, ее ясно, что я только хочу, чтобы вывести строку на основе ввода любого данного продукта. Должен ли я переопределять _toHtml()
, чтобы доставить строку? Еще раз. Наверное, нет ...
в моем local.xml я ссылаться на блок:
<catalog_product_view>
<reference name="content">
<reference name="product.info">
<block type="WACI/ProductFlag" name="product.flag" as="productFlag" output="toHtml" />...
... Я не ясно, если это конкретизирует этот класс? Я так не думаю. Я не уверен, как обращаться к нему в моем продукте/view/media.phtml в любом случае, учитывая, что мне нужно вызвать метод с параметром.
Я не думаю, что мне нужен файл шаблона, учитывая, что я просто выводил строку, но я не думаю, что видел блок-модули без связанного шаблона. Может быть, тогда класс помощников подходит?
В любом случае, это не workin.
Я либо получил фатальную ошибку, заявив, что мой медиакласс не имеет метода getIsFF()
(неудивительно), или просто ничего не появляется. Мои конфигурационные файлы верны, но я думаю об этом.
Jebus. Я все обернулся.
Может ли кто-то с умением Мага прояснить эту простую проблему и указать мне в правильном направлении?
Cheers!
Пожалуйста, сообщите точную ошибку, если вы не возражаете, сэр. (С stacktrace) –
Привет там - спасибо за ответ. Я, наконец, получил этот вид работы вчера вечером, прежде чем я оставил работу. сделал простой вспомогательный класс, который я (в конечном итоге) смог получить. Не знаю, правильная ли моя архитектура - немного взломана. Будет опубликовать то, что я придумал в понедельник. ... проходя через видеомагнитофоны и видео. может помочь ускорить этот процесс. – Bosworth99