Пользовательский атрибут для изображения продукта, Не отображающий Сохраненные значения в Форме администратора (Атрибут Медиа-галереи)
Аналогично приведенному ниже:
Как сохранить пользовательский атрибут изображения в magento 2
Последовали приведенному выше вопросу и добавили пользовательский атрибут текстовой области. До сих пор поле отображается для меня в разделе "Альтернативный текст", а затем проверенные значения сохраняются в БД для таблицы галереи мультимедиа, приведенной ниже:
select * from catalog_product_entity_media_gallery WHERE value_id = 17571;
Приведенный выше запрос возвращает мой пользовательский атрибут и значение fine, однако после сохранения форма сведений о продукте администратора не отображает значение для этого атрибут.
В моем шаблоне для новой формы мультимедиа добавлено поле, которое выглядит следующим образом:
<div class="admin__field field-image-custom_link">
<label class="admin__field-label" for="custom_image_link-save">
<span><?= $block->escapeHtml(__('Custom Image Link')) ?></span>
</label>
<div class="admin__field-control">
<div class="admin__field admin__field-option">
<textarea type="text"
rows="2"
data-form-part="<?php /* @escapeNotVerified */ echo $formName ?>"
data-role="custom_image_link-save"
class="admin__control-text"
name="<?= $block->escapeHtmlAttr($elementName) ?>[<%- data.file_id %>][custom_image_link]"/><%- data.custom_image_link %></textarea>
</div>
</div>
</div>
Это измененная версия шаблона в другом вопросе, где custom_image_link
- мой пользовательский текстовый атрибут. Поэтому я использовал <%- data.custom_image_link %>
, чтобы, надеюсь, привести поле в форму, однако ничего не видно.
В вопросе он показывает значение data.useforvm
, однако атрибут был vm
и useforvm
нигде больше не упоминается, поэтому, возможно, отсутствует шаг?
1 answers
Вот мой пример модуля из упомянутого вопроса/ответа на GitHub. Вы можете изучить фиксацию https://github.com/SiarheyUchukhlebau/Dcw_Vm/commit/baf4053dc1d9fa625122cddcfb0da05029bda41f{[10] } чтобы определить, как я добавил еще один атрибут для изображения медиагалереи под названием custom_iamge_link
(имеющий тип text
).
Я не знаю, что именно идет не так в вашем случае, потому что вы не добавили полный код, но, похоже, это проблема плагина\наблюдателя. Вот два части кода, в которых сохраняются и загружаются данные:
App/code/Dcw/Vm/Observer/ProductSaveAfter.php
Здесь мы сохраняем наше пользовательское значение (не знаю, почему это выглядит так странно, но это работает:)):
public function execute(\Magento\Framework\Event\Observer $observer)
{
$data = $this->request->getPostValue();
if (isset($data['product']['media_gallery']['images'])) {
// print_r($images);exit;
$connection = $this->resource->getConnection();
$tableName = $this->resource->getTableName('catalog_product_entity_media_gallery'); //gives table name with prefix
$product = $observer->getProduct();
$mediaGallery = $product->getMediaGallery();
if (isset($mediaGallery['images'])) {
foreach ($mediaGallery['images'] as $image) {
//Update Data into table
$vmValue = !empty($image['vm']) ? (int)$image['vm'] : 0;
$customImageLinkValue = !empty($image['custom_image_link']) ? $image['custom_image_link'] : '';
$sql = "UPDATE " . $tableName . " SET vm = ?, custom_image_link = ? WHERE value_id = ?";
$connection->query($sql, [$vmValue, $customImageLinkValue, $image['value_id']]);
}
}
}
}
И плагин загрузки данных, который отвечает за передачу значений в нашу "форму редактирования продукта":
App/code/Dcw/Vm/Plugin/Product/Gallery.php
/**
* Add new columns to the regular media gallery select
*
* @param \Magento\Catalog\Model\ResourceModel\Product\Gallery $subject
* @param \Magento\Framework\DB\Select $select
* @return \Magento\Framework\DB\Select
*/
public function afterCreateBatchBaseSelect(
\Magento\Catalog\Model\ResourceModel\Product\Gallery $subject,
\Magento\Framework\DB\Select $select
) {
$select->columns(['vm', 'custom_image_link']);
return $select;
}
Если две из этих частей кода работают должным образом, все они должны быть хорошо.
Вот мой пример пользовательского поля атрибута в перезаписанном шаблоне, но он выглядит как аналогичная часть вашего шаблона:
<div class="admin__field field-image-custom_link">
<label class="admin__field-label" for="custom_image_link">
<span><?= $block->escapeHtml(__('Custom Image Link')) ?></span>
</label>
<div class="admin__field-control">
<div class="admin__field admin__field-option">
<textarea type="text"
rows="2"
data-role="custom_image_link"
data-form-part="<?php /* @escapeNotVerified */ echo $formName ?>"
class="admin__control-textarea"
name="<?= /* @noEscape */ $elementName; ?>[<%- data.file_id %>][custom_image_link]"><%- data.custom_image_link %></textarea>
</div>
</div>
</div>
Вот как это выглядит на моей сцене:
PS: не забудьте удалить косую черту (/>
) в конце открывающего тега <textarea>
, потому что у него есть закрывающий тег.