/** * Render Media Chooser HTML (buttons and image preview) and set it after the form element HTML * * @param Varien_Data_Form_Element_Abstract $element * * @return Varien_Data_Form_Element_Abstract */ public function render(Varien_Data_Form_Element_Abstract $element) { if (Mage::getSingleton('admin/session')->isAllowed('cms/media_gallery')) { $layout = Mage::app()->getLayout(); $id = $element->getHtmlId(); if ($url = $element->getValue()) { $linkStyle = "display:inline;"; if (!preg_match("/^http\\:\\/\\/|https\\:\\/\\//", $url)) { $url = Mage::getBaseUrl('media') . $url; } } else { $linkStyle = "display:none;"; $url = "#"; } $imagePreview = '<a id="' . $id . '_link" href="' . $url . '" style="text-decoration: none; ' . $linkStyle . '"' . ' onclick="imagePreview(\'' . $id . '_image\'); return false;">' . ' <img src="' . $url . '" id="' . $id . '_image" title="' . $element->getValue() . '"' . ' alt="' . $element->getValue() . '" height="30" class="small-image-preview v-middle"/>' . ' </a>'; $selectButtonId = 'add-image-' . mt_rand(); $chooserUrl = Mage::getUrl('adminhtml/cms_wysiwyg_images_chooser/index', array('target_element_id' => $id)); $label = $element->getValue() ? $this->__('Change Image') : $this->__('Select Image'); // Select/Change Image Button $chooseButton = $layout->createBlock('adminhtml/widget_button')->setType('button')->setClass('add-image')->setId($selectButtonId)->setLabel($label)->setOnclick('MediabrowserUtility.openDialog(\'' . $chooserUrl . '\')')->setDisabled($element->getReadonly())->setStyle('display:inline;margin-top:7px'); // Remove Image Button $onclickJs = ' document.getElementById(\'' . $id . '\').value=\'\'; if(document.getElementById(\'' . $id . '_image\')){ document.getElementById(\'' . $id . '_image\').parentNode.style.display = \'none\'; } document.getElementById(\'' . $selectButtonId . '\').innerHTML=\'<span><span><span>' . addslashes($this->__('Select Image')) . '</span></span></span>\'; '; $removeButton = $layout->createBlock('adminhtml/widget_button')->setType('button')->setClass('delete')->setLabel($this->__('Remove Image'))->setOnclick($onclickJs)->setDisabled($element->getReadonly())->setStyle('margin-top:7px'); $wrapperStart = '<div id="buttons_' . $id . '" class="buttons-set" style=" width: 325px;">'; $wrapperEnd = '</div>'; $wrapperEnd .= ' <script type="text/javascript"> //<![CDATA[ varienGlobalEvents.clearEventHandlers(\'mediachooserChange' . $id . '\'); varienGlobalEvents.attachEventHandler(\'mediachooserChange' . $id . '\', function(url){ document.getElementById(\'' . $id . '_image\').src = \'' . Mage::getBaseUrl('media') . '\' + url; document.getElementById(\'' . $id . '_image\').title = url; document.getElementById(\'' . $id . '_image\').alt = url; document.getElementById(\'' . $id . '_link\').href = \'' . Mage::getBaseUrl('media') . '\' + url; document.getElementById(\'' . $id . '_link\').style.display = \'inline\'; document.getElementById(\'' . $selectButtonId . '\').innerHTML=\'<span><span><span>' . addslashes($this->__('Change Image')) . '</span></span></span>\'; }); //]]> </script> '; // Add our custom HTML after the form element $element->setAfterElementHtml($wrapperStart . $imagePreview . $chooseButton->toHtml() . $removeButton->toHtml() . $wrapperEnd); } return $element; }
public function renderMediaChooser(Varien_Data_Form_Element_Abstract $element) { if (Mage::getSingleton('admin/session')->isAllowed('cms/media_gallery')) { $layout = $element->getForm()->getParent()->getLayout(); $id = $element->getHtmlId(); if ($url = $element->getValue()) { $linkStyle = "display:inline;"; if (!preg_match("/^http\\:\\/\\/|https\\:\\/\\//", $url)) { $url = Mage::getBaseUrl('media') . $url; } } else { $linkStyle = "display:none;"; $url = "#"; } $hiddenField = '<input type="hidden" name="hidden_file" id="hidden_file_' . $id . '" class="hidden-file-path" value=""/>'; $imagePreview = '<a id="' . $id . '_link" class="image-preview-link" href="' . $url . '" style="text-decoration: none; ' . $linkStyle . '"' . ' onclick="imagePreview(\'' . $id . '_image\'); return false;">' . ' <img src="' . $url . '" id="' . $id . '_image" title="' . $element->getValue() . '"' . ' alt="' . $element->getValue() . '" height="30" class="small-image-preview v-middle"/>' . ' </a>'; $selectButtonId = 'add-image-' . mt_rand(); $chooserUrl = Mage::getUrl('adminhtml/cms_wysiwyg_images_chooser/index', array('target_element_id' => $id)); $label = $element->getValue() ? $this->__('Change Image') : $this->__('Select Image'); // Select/Change Image Button $chooseButton = $layout->createBlock('adminhtml/widget_button')->setType('button')->setClass('add-image')->setId($selectButtonId)->setLabel($label)->setOnclick('openEfinder(this, \'hidden_file_' . $id . '\', \'#' . $id . '\', changeElFieldImage)')->setDisabled($element->getReadonly())->setStyle('display:inline;margin-top:7px'); // Remove Image Button $onclickJs = ' document.getElementById(\'' . $id . '\').value=\'\'; document.getElementById(\'hidden_file_' . $id . '\').value=\'\'; if(document.getElementById(\'' . $id . '_image\')){ document.getElementById(\'' . $id . '_image\').parentNode.style.display = \'none\'; } document.getElementById(\'' . $selectButtonId . '\').innerHTML=\'<span><span><span>' . addslashes($this->__('Select Image')) . '</span></span></span>\'; '; $removeButton = $layout->createBlock('adminhtml/widget_button')->setType('button')->setClass('delete')->setLabel($this->__('Remove Image'))->setOnclick($onclickJs)->setDisabled($element->getReadonly())->setStyle('margin-top:7px'); $wrapperStart = '<div id="buttons_' . $id . '" class="buttons-set" style=" width: 325px;">'; $wrapperEnd = '</div>'; // Add our custom HTML after the form element $element->setAfterElementHtml($wrapperStart . $hiddenField . $imagePreview . $chooseButton->toHtml() . $removeButton->toHtml() . $wrapperEnd); } return $element; }
/** * Replaces part of the chooser ajax fetch url, * because we hit 404 page when we have routers defined in the following way: * * <admin> * <routers> * <brands> * <use>admin</use> * <args> * <module>MyCompany_MyModule</module> * <frontName>myfrontname</frontName> * </args> * </brands> * </routers> * </admin> * * Basically we just replace "myfrontname" with the admin front name * * @param Varien_Data_Form_Element_Abstract $element */ protected function _fixChooserAjaxUrl($element) { $adminPath = (string) Mage::getConfig()->getNode(Mage_Adminhtml_Helper_Data::XML_PATH_ADMINHTML_ROUTER_FRONTNAME); $currentRouterName = Mage::app()->getRequest()->getRouteName(); if ($adminPath != $currentRouterName) { $afterElementHtml = $element->getAfterElementHtml(); $afterElementHtml = str_replace('/' . $currentRouterName . '/', '/' . $adminPath . '/', $afterElementHtml); $element->setAfterElementHtml($afterElementHtml); } }