как заполнить форму галереи изображений в Magento Admin - PullRequest
1 голос
/ 22 июня 2011

Я вижу, что Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery_Content::getImagesJson() и app\design\adminhtml\default\default\template\catalog\product\helper\gallery.phtml отвечают за размещение данных изображения в браузере с помощью класса-прототипа Product.Gallery.

Однако я не могу отследить, где коллекция изображений установлена ​​в блоке Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery_Content. Я предполагаю, что это через магический установщик где-то в контроллере или макете, но я не могу отследить его.

Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery_Content::getImagesJson() имеет

$value = $this->getElement()->getValue();
        if(count($value['images'])>0) {
            foreach ($value['images'] as &$image) {

что-то заполняет атрибут element этого блока.

Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery_Content создается экземпляром Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery::getContentHtml(), но это не устанавливает никаких атрибутов в блоке.

Я вижу, что Mage_Catalog_Model_Product_Attribute_Backend_Media::afterLoad() заполняет атрибут массивом, который соответствует структуре, которую ищет Javascript Product.Gallery, но я все еще немного озадачен тем, где Атрибут связан с Блоком рендеринга.

Я думаю, мне нужна диаграмма, чтобы держать эту запутанную паутину прямо в моей голове!

Спасибо
Jonathan

Ответы [ 3 ]

1 голос
/ 22 июня 2011

Вы говорите;

... кажется, создается Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery::getContentHtml(), но это не устанавливает никаких атрибутов в блоке.

Но getContentHtml() выглядит так:

/**
 * Prepares content block
 *
 * @return string
 */
public function getContentHtml()
{

    /* @var $content Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery_Content */
    $content = Mage::getSingleton('core/layout')
        ->createBlock('adminhtml/catalog_product_helper_form_gallery_content');

    $content->setId($this->getHtmlId() . '_content')
        ->setElement($this);
    return $content->toHtml();
}

Он явно устанавливает element для $content на $this, то есть объект Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery.

1 голос
/ 22 июня 2011

Ответ был прямо передо мной. Атрибут media_gallery в eav_attribute определяет Mage_Catalog_Model_Product_Attribute_Backend_Media как его внутренний класс, который выполняет магический установщик afterLoad.

Все еще не совсем уверен, где Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery присоединяется к вкладкам экрана редактирования продукта, кто-нибудь знает?

0 голосов
/ 31 июля 2012

Все еще не совсем уверен, где Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery прикрепляется к экрану редактирования продукта. Вкладки, кто-нибудь знает?

Я узнал, что это сделано в Mage_Adminhtml_Block_Catalog_Product_Edit_Tabs

Посмотрите на строку 74:

            $this->addTab('group_'.$group->getId(), array(
                'label'     => Mage::helper('catalog')->__($group->getAttributeGroupName()),
                'content'   => $this->_translateHtml($this->getLayout()->createBlock($this->getAttributeTabBlock(),
                    'adminhtml.catalog.product.edit.tab.attributes')->setGroup($group)
                        ->setGroupAttributes($attributes)
                        ->toHtml()),
            ));

Если вы прокомментировали этот код, вкладка «Изображения» исчезнет.

В этой галерее много "магии", я открыл еще одно обсуждение по этому поводу: https://stackoverflow.com/questions/11740995/how-to-include-magento-image-gallery-in-a-custom-module-backend

Надеюсь, это поможет :)

...