Magento 2 - Как переопределить Admin Gallery.phtml в пользовательском модуле
Я пытаюсь переопределить файл администратора,
module-product-video\view\adminhtml\templates\helper\gallery.phtml
Я не могу найти файл макета для этого, потому что он установлен внутри блока под названием
magento\module-catalog\Block\Adminhtml\Product\Helper\Form\Gallery\Content.php
Может ли кто-нибудь направить меня?
Обновленный код:
etc/di.xml
<preference for="Magento\Catalog\Block\Adminhtml\Product\Helper\Form\Gallery\Content" type="Bhupendra\Helloworld\Block\Adminhtml\Product\Gallery\Content" />
БЛОК:
<?php
namespace Bhupendra\Helloworld\Block\Adminhtml\Product\Gallery;
use Magento\Backend\Block\Media\Uploader;
use Magento\Framework\View\Element\AbstractBlock;
class Content extends \Magento\Catalog\Block\Adminhtml\Product\Helper\Form\Gallery\Content
{
/**
* @var string
*/
protected $_template = 'Bhupendra_Helloworld::product/gallery.phtml';
}
Шаблон:
module-product-video\view\adminhtml\templates\helper\gallery.phtml
До
view\adminhtml\templates\product\gallery.phtml
2 answers
Если мы посмотрим: vendor/magento/module-product-video/Observer/ChangeTemplateObserver.php
. Мы видим, что этот шаблон будет добавлен через событие наблюдателя. Итак, нам нужно отключить это событие наблюдателя в нашем модуле. А затем попробуйте добавить наш пользовательский шаблон.
Vendor/Module/etc/events.xml
<event name="catalog_product_gallery_prepare_layout">
<observer name="change_template" disabled="true"/>
<observer name="custom_change_template" instance="Vendor\Module\Observer\ChangeTemplateObserver" />
</event>
Vendor/Module/Observer/ChangeTemplateObserver.php
<?php
namespace Vendor\Module\Observer;
use Magento\Framework\Event\ObserverInterface;
class ChangeTemplateObserver implements ObserverInterface
{
public function execute(\Magento\Framework\Event\Observer $observer)
{
$observer->getBlock()->setTemplate('Vendor_Module::helper/gallery.phtml');
}
}
Вам необходимо создать модуль.
App/code/Test/Video/etc/module.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Test_Video" setup_version="2.0.0" schema_version="2.0.0"/>
<sequence>
<module name="Magento_Customer"/>
<module name="Magento_Store"/>
<module name="Magento_Ui"/>
</sequence>
</config>
App/code/Test/Video/registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Test_Video',
__DIR__
);
App/code/Test/Video/etc/adminhtml/events.xml
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="catalog_product_gallery_prepare_layout">
<observer name="change_template" disabled="true"/>
<observer name="custom_change_template" instance="Test\Video\Observer\OptionObserver" />
</event>
</config>
App/code/Test/Video/Observer/ChangeTemplateObserver.php
<?php
namespace Test\Video\Observer;
use Magento\Framework\Event\ObserverInterface;
class OptionObserver implements ObserverInterface
{
public function execute(\Magento\Framework\Event\Observer $observer)
{
$observer->getBlock()->setTemplate('Test_Video::helper/gallery.phtml');
}
}
Приложение/код/Тест/Видео/просмотр/adminhtml/шаблоны/помощник/галерея.phtml
<?php
/**
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
// @codingStandardsIgnoreFile
/** @var $block \Magento\Catalog\Block\Adminhtml\Product\Helper\Form\Gallery\Content */
$elementName = $block->getElement()->getName() . '[images]';
$formName = $block->getFormName();
?>
<div class="row">
<div class="add-video-button-container">
<button id="add_video_button"
title="<?php echo $block->escapeHtml(__('Add Video'));?>"
data-role="add-video-button"
type="button"
class="action-secondary"
data-ui-id="widget-button-1">
<span><?php echo $block->escapeHtml(__('Add Video')) ?></span>
</button>
</div>
**<div class="uplload" style="color:#000; font-weight:bold";>Please Upload a Image 1000px * 1000px </div>** - **If you wanna add a text , you can do like this**
</div>
<?php
/** @var $block \Magento\Catalog\Block\Adminhtml\Product\Helper\Form\Gallery\Content */
$element = $block->getElement();
$elementToggleCode = $element->getToggleCode() ? $element->getToggleCode() : 'toggleValueElements(this, this.parentNode.parentNode.parentNode)';
?>
<div id="<?php echo $block->getHtmlId() ?>"
class="gallery"
data-mage-init='{"openVideoModal":{}}'
data-parent-component="<?php echo $block->escapeHtml($block->getData('config/parentComponent')) ?>"
data-images="<?php echo $block->escapeHtml($block->getImagesJson()) ?>"
data-types="<?php echo $block->escapeHtml(
$this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($block->getImageTypes())
) ?>"
>
<?php
if (!$block->getElement()->getReadonly()):
?>
<div class="image image-placeholder">
<?php /* @escapeNotVerified */ echo $block->getUploaderHtml();
?>
<div class="product-image-wrapper">
<p class="image-placeholder-text">
<?php echo $block->escapeHtml(
__('Browse to find or drag image here')
); ?>
</p>
</div>
</div>
<?php /* @escapeNotVerified */ echo $block->getChildHtml('additional_buttons'); ?>
<?php
endif;
?>
<?php
foreach ($block->getImageTypes() as $typeData):
?>
<input name="<?php echo $block->escapeHtml($typeData['name']) ?>"
data-form-part="<?php /* @escapeNotVerified */ echo $formName ?>"
class="image-<?php echo $block->escapeHtml($typeData['code']) ?>"
type="hidden"
value="<?php echo $block->escapeHtml($typeData['value']) ?>"/>
<?php
endforeach;
?>
<script id="<?php /* @escapeNotVerified */ echo $block->getHtmlId() ?>-template" data-template="image" type="text/x-magento-template">
<div class="image item <% if (data.disabled == 1) { %>hidden-for-front<% } %> <% if (data.video_url) { %>video-item<% } %>"
data-role="image">
<input type="hidden"
name="<?php /* @escapeNotVerified */ echo $elementName ?>[<%- data.file_id %>][position]"
value="<%- data.position %>"
data-form-part="<?php /* @escapeNotVerified */ echo $formName ?>"
class="position"/>
<% if (data.media_type !== 'external-video') {%>
<input type="hidden"
name="<?php /* @escapeNotVerified */ echo $elementName ?>[<%- data.file_id %>][media_type]"
data-form-part="<?php /* @escapeNotVerified */ echo $formName ?>"
value="image"/>
<% } else { %>
<input type="hidden"
name="<?php /* @escapeNotVerified */ echo $elementName ?>[<%- data.file_id %>][media_type]"
value="<%- data.media_type %>"
data-form-part="<?php /* @escapeNotVerified */ echo $formName ?>"/>
<% } %>
<input type="hidden"
name="<?php /* @escapeNotVerified */ echo $elementName ?>[<%- data.file_id %>][video_provider]"
value="<%- data.video_provider %>"
data-form-part="<?php /* @escapeNotVerified */ echo $formName ?>"/>
<input type="hidden"
name="<?php /* @escapeNotVerified */ echo $elementName ?>[<%- data.file_id %>][file]"
value="<%- data.file %>"
data-form-part="<?php /* @escapeNotVerified */ echo $formName ?>"/>
<input type="hidden"
name="<?php /* @escapeNotVerified */ echo $elementName ?>[<%- data.file_id %>][value_id]"
value="<%- data.value_id %>"
data-form-part="<?php /* @escapeNotVerified */ echo $formName ?>"/>
<input type="hidden"
name="<?php /* @escapeNotVerified */ echo $elementName ?>[<%- data.file_id %>][label]"
value="<%- data.label %>"
data-form-part="<?php /* @escapeNotVerified */ echo $formName ?>"/>
<input type="hidden"
name="<?php /* @escapeNotVerified */ echo $elementName ?>[<%- data.file_id %>][disabled]"
value="<%- data.disabled %>"
data-form-part="<?php /* @escapeNotVerified */ echo $formName ?>"/>
<input type="hidden"
name="<?php /* @escapeNotVerified */ echo $elementName ?>[<%- data.file_id %>][removed]"
value="" class="is-removed"
data-form-part="<?php /* @escapeNotVerified */ echo $formName ?>"/>
<input type="hidden"
name="<?php /* @escapeNotVerified */ echo $elementName ?>[<%- data.file_id %>][video_url]"
value="<%- data.video_url %>"
data-form-part="<?php /* @escapeNotVerified */ echo $formName ?>"/>
<input type="hidden"
name="<?php /* @escapeNotVerified */ echo $elementName ?>[<%- data.file_id %>][video_title]"
value="<%- data.video_title %>"
data-form-part="<?php /* @escapeNotVerified */ echo $formName ?>"/>
<input type="hidden"
name="<?php /* @escapeNotVerified */ echo $elementName ?>[<%- data.file_id %>][video_description]"
value="<%- data.video_description %>"
data-form-part="<?php /* @escapeNotVerified */ echo $formName ?>"/>
<input type="hidden"
name="<?php /* @escapeNotVerified */ echo $elementName ?>[<%- data.file_id %>][video_metadata]"
value="<%- data.video_metadata %>"
data-form-part="<?php /* @escapeNotVerified */ echo $formName ?>"/>
<input type="hidden"
name="<?php /* @escapeNotVerified */ echo $elementName ?>[<%- data.file_id %>][role]"
value="<%- data.video_description %>"
data-form-part="<?php /* @escapeNotVerified */ echo $formName ?>"/>
<div class="product-image-wrapper">
<img class="product-image"
data-role="image-element"
src="<%- data.url %>"
alt="<%- data.label %>"/>
<div class="actions">
<button type="button"
class="action-remove"
data-role="delete-button"
title="<% if (data.media_type == 'external-video') {%>
<?php echo $block->escapeHtml(
__('Delete video')
); ?>
<%} else {%>
<?php echo $block->escapeHtml(
__('Delete image')
); ?>
<%}%>">
<span>
<% if (data.media_type == 'external-video') { %>
<?php echo $block->escapeHtml(
__('Delete video')
); ?>
<% } else {%>
<?php echo $block->escapeHtml(
__('Delete image')
); ?>
<%} %>
</span>
</button>
<div class="draggable-handle"></div>
</div>
<div class="image-fade"><span><?php echo $block->escapeHtml(
__('Hidden')
); ?></span></div>
</div>
<div class="item-description">
<% if (data.media_type !== 'external-video') {%>
<div class="item-title" data-role="img-title"><%- data.label %></div>
<div class="item-size">
<span data-role="image-dimens"></span>, <span data-role="image-size"><%- data.sizeLabel %></span>
</div>
<% } else { %>
<div class="item-title" data-role="img-title"><%- data.video_title %></div>
<% } %>
</div>
<ul class="item-roles" data-role="roles-labels">
<?php
foreach ($block->getImageTypes() as $typeData):
?>
<li data-role-code="<?php echo $block->escapeHtml(
$typeData['code']
) ?>" class="item-role item-role-<?php echo $block->escapeHtml(
$typeData['code']
) ?>">
<?php echo $block->escapeHtml($typeData['label']) ?>
</li>
<?php
endforeach;
?>
</ul>
</div>
</script>
<script data-role="img-dialog-container-tmpl" type="text/x-magento-template">
<div class="image-panel" data-role="dialog">
</div>
</script>
<script data-role="img-dialog-tmpl" type="text/x-magento-template">
<div class="image-panel-preview">
<img src="<%- data.url %>" alt="<%- data.label %>" />
</div>
<div class="image-panel-controls">
<strong class="image-name"><%- data.label %></strong>
<fieldset class="admin__fieldset fieldset-image-panel">
<div class="admin__field field-image-description">
<label class="admin__field-label" for="image-description">
<span><?php /* @escapeNotVerified */ echo __('Alt Text')?></span>
</label>
<div class="admin__field-control">
<textarea data-role="image-description"
rows="3"
class="admin__control-textarea"
name="<?php /* @escapeNotVerified */
echo $elementName
?>[<%- data.file_id %>][label]"><%- data.label %></textarea>
</div>
</div>
<div class="admin__field field-image-role">
<label class="admin__field-label">
<span><?php echo $block->escapeHtml(
__('Role')
); ?></span>
</label>
<div class="admin__field-control">
<ul class="multiselect-alt">
<?php
foreach ($block->getMediaAttributes() as $attribute) :
?>
<li class="item">
<label>
<input class="image-type"
data-role="type-selector"
data-form-part="<?php /* @escapeNotVerified */ echo $formName ?>"
type="checkbox"
value="<?php echo $block->escapeHtml(
$attribute->getAttributeCode()
) ?>"
/>
<?php /* @escapeNotVerified */ echo $block->escapeHtml(
$attribute->getFrontendLabel()
) ?>
</label>
</li>
<?php
endforeach;
?>
</ul>
</div>
</div>
<div class="admin__field admin__field-inline field-image-size" data-role="size">
<label class="admin__field-label">
<span><?php /* @escapeNotVerified */ echo __('Image Size') ?></span>
</label>
<div class="admin__field-value" data-message="<?php /* @escapeNotVerified */ echo __('{size}') ?>"></div>
</div>
<div class="admin__field admin__field-inline field-image-resolution" data-role="resolution">
<label class="admin__field-label">
<span><?php /* @escapeNotVerified */ echo __('Image Resolution') ?></span>
</label>
<div class="admin__field-value" data-message="<?php /* @escapeNotVerified */ echo __('{width}^{height} px') ?>"></div>
</div>
<div class="admin__field field-image-hide">
<div class="admin__field-control">
<div class="admin__field admin__field-option">
<input type="checkbox"
id="hide-from-product-page"
data-role="visibility-trigger"
data-form-part="<?php /* @escapeNotVerified */ echo $formName ?>"
value="1"
class="admin__control-checkbox"
name="<?php /* @escapeNotVerified */ echo $elementName ?>[<%- data.file_id %>][disabled]"
<% if (data.disabled == 1) { %>checked="checked"<% } %> />
<label for="hide-from-product-page" class="admin__field-label">
<?php echo $block->escapeHtml(
__('Hide from Product Page')
); ?>
</label>
</div>
</div>
</div>
</fieldset>
</div>
</script>
<div id="<?php /* @noEscape */ echo $block->getNewVideoBlockName();?>" style="display:none">
<?php /* @escapeNotVerified */ echo $block->getFormHtml();?>
<div id="video-player-preview-location" class="video-player-sidebar">
<div class="video-player-container"></div>
<div class="video-information title">
<label><?php echo $block->escapeHtml(
__('Title:')
); ?> </label><span></span>
</div>
<div class="video-information uploaded">
<label><?php echo $block->escapeHtml(
__('Uploaded:')
); ?> </label><span></span>
</div>
<div class="video-information uploader">
<label><?php echo $block->escapeHtml(
__('Uploader:')
); ?> </label><span></span>
</div>
<div class="video-information duration">
<label><?php echo $block->escapeHtml(
__('Duration:')
); ?> </label><span></span>
</div>
</div>
</div>
<?php echo $block->getChildHtml('new-video'); ?>
</div>
<script>
jQuery('body').trigger('contentUpdated');
</script>
Следуйте этому. вы получите.