আমি পণ্য স্তরের কাস্টম বিকল্পগুলির মানটিতে ডিফল্ট বিকল্পটি সেট করতে চাই।
এই সমাধান করতে আমাকে সাহায্য করুন।
আমি পণ্য স্তরের কাস্টম বিকল্পগুলির মানটিতে ডিফল্ট বিকল্পটি সেট করতে চাই।
এই সমাধান করতে আমাকে সাহায্য করুন।
উত্তর:
আমি নিশ্চিত নই আপনি এডমিনের মাধ্যমে এটি করতে পারবেন। আমি সবেমাত্র একটি কাজ করেছি যেখানে আমি নিশ্চিত করেছিলাম যে আমার সমস্ত "ডিফল্ট বিকল্পগুলি" অ্যাডমিনের মধ্যে প্রথম বিকল্প এবং তারপরে নীচে আমার স্টোরের জন্য জেএসে যুক্ত করেছি।
<script>
require(['jquery', 'jquery/ui'], function($){
$('.product-add-form .field select').each(function(i, obj) {
$(obj).find('option:eq(1)').prop('selected', true);
});
});
</script>
এটি কাস্টম বিকল্পগুলির জন্য কাজ করে কারণ এগুলি সমস্ত পৃষ্ঠা লোডে দেওয়া হয়। কোডটি কেবলমাত্র সমস্ত পছন্দসই বিকল্পগুলির মধ্যেই লুপ করে এবং দ্বিতীয় বিকল্পটি প্রথম হিসাবে "দয়া করে নির্বাচন করুন" হিসাবে সেট করে।
কনফিগারযোগ্য পণ্যগুলির সাথে আমার কিছুটা বেশি অসুবিধা হয়েছিল কারণ অপশনগুলি সমস্ত পৃষ্ঠা লোডের পরে লোড হয়েছিল তবে তা করতে আপনি আমার প্রশ্নটি এখানে দেখতে পারেন: ম্যাজেন্টো 2: কনফিগারযোগ্য বিকল্পগুলিতে ডিফল্ট বিকল্পটি কীভাবে সেট করবেন?
আমার মনে হয় আপনি যা অর্জন করতে চান তা কি এরকম কিছু?
আমি প্রয়োগ করেছি যে ড্রপডাউন ক্ষেত্রগুলির জন্য, রেডিওব্যাটনের সাথে একই হওয়া উচিত।
catalog_product_option_type_value
।Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\CustomOptions
।উদাহরণ:
বিক্রেতা / মডিউল, / etc / adminhtml / di.xml
<?xml version="1.0"?>
<config>
<type name="Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\CustomOptions">
<plugin name="CustomOptionsUiPlugin" type="Vendor\Module\Plugin\CustomOptionsUiPlugin" sortOrder="1"/>
</type>
</config>
বিক্রেতার \ মডিউল \ প্লাগইন \ CustomOptionsUiPlugin.php
namespace Vendor\Module\Plugin;
class CustomOptionsUiPlugin
{
...
public function afterModifyMeta(\Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\CustomOptions $subject,$meta)
{
$result = $meta;
$result['custom_options']['children']['options']['children']['record']['children']["container_option"]['children']['values']['children']['record']['children']['is_default'] = [
'arguments' => [
'data' => [
'config' => [
'label' => __('Default'),
'componentType' => 'field',
'formElement' => 'checkbox',
'dataScope' => 'is_default',
'dataType' => 'number',
'additionalClasses' => 'admin__field-small',
'sortOrder' => 55,
'value' => '0',
'valueMap' => [
'true' => '1',
'false' => '0'
]
]
]
]
];
return $result;
}
}
এবং সর্বশেষে আপনাকে Magento\Catalog\Block\Product\View\Options\Type\Select.php
এই জাতীয় কিছু দিয়ে ফাইলটি ওভাররাইট করতে হবে
$defaultAttribute = array();
if($_value->getData('is_default') == true){
$defaultAttribute = ['selected' => 'selected','default' => 'default'];
}
$select->addOption(
$_value->getOptionTypeId(),
$_value->getTitle() . ' ' . strip_tags($priceStr) . '',
['price' => $this->pricingHelper->currencyByStore($_value->getPrice(true), $store, false),$defaultAttribute]
);
আশা করি এইটি কাজ করবে!
$defaultAttribute
বিকল্পের অতিরিক্ত বৈশিষ্ট্য হিসাবে যুক্ত করা পূর্বনির্ধারিত মানগুলির সাথে দ্বিধা-দ্বন্দ্ব হবে (buy_request, ...)। উদাহরণস্বরূপ, একটি কার্ট আইটেম সম্পাদনা করার সময়, গ্রাহক দ্বারা নির্বাচিত মান এবং "is_default" মান উভয় selected="selected"
কোড হিসাবে চিহ্নিত করা হবে ।
@ ট্রাইটোফ্লাই আপনার সমাধানের জন্য ধন্যবাদ আমি আপনার কোড দিয়ে চেষ্টা করেছি এবং আমি "ডিফল্ট" বিকল্পটি প্রদর্শন করতে সক্ষম হয়েছি তবে কাস্টম মানগুলি প্রদর্শিত হচ্ছে না। ইস্যুটি ঠিক করতে আমাকে সহায়তা করুন P ছবিগুলি সন্ধান করুন
$result = $meta;
আপনার মডার্নিমিডেটা () পদ্ধতিটির শুরুতে সেট করতে হবে । অন্যথায় আপনি এটির ডিফল্ট বিকল্পটি যুক্ত করার পরিবর্তে আপনার ফিরতি মানটি ওভাররাইট করে ফেলবেন।
@ ট্রিটোফ্লাই এটিই আমার পক্ষে কাজ করেছিল।
<?php
namespace Sigma\DefaultCustomOptions\Plugin;
class CustomOptionsUiPlugin
{
public function afterModifyMeta(
\Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\CustomOptions $subject,
$result
) {
$subject;
$result['custom_options']['children']['options']['children']['record']['children']["container_option"]
['children']['values']['children']['record']['children'] =array_replace_recursive(
$result['custom_options']['children']['options']['children']['record']['children']
["container_option"]['children']['values']['children']['record']['children'],
[
'is_default' => [
'arguments' => [
'data' => [
'config' => [
'label' => __('Default'),
'componentType' => 'field',
'formElement' => 'checkbox',
'dataScope' => 'is_default',
'dataType' => 'number',
'sortOrder' => 70,
'value' => '0',
'valueMap' => [
'true' => '1',
'false' => '0'
]
]
]
]
]
]
);
return $result;
}
}
আপনি ফোলিং কোড ফাংশনের মতো সিলেক্ট.এইচপিপি ফাইলটিকে ওভাররাইড করতে পারেন:
class AroundOptionValuesHtml extends \Magento\Catalog\Block\Product\View\Options\Type\Select
{
public function getValuesHtml()
{
$_option = $this->getOption();
$configValue = $this->getProduct()->getPreconfiguredValues()->getData('options/' . $_option->getId());
$store = $this->getProduct()->getStore();
$this->setSkipJsReloadPrice(1);
// Remove inline prototype onclick and onchange events
if ($_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_DROP_DOWN ||
$_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_MULTIPLE
) {
$require = $_option->getIsRequire() ? ' required' : '';
$extraParams = '';
$select = $this->getLayout()->createBlock(
\Magento\Framework\View\Element\Html\Select::class
)->setData(
[
'id' => 'select_' . $_option->getId(),
'class' => $require . ' product-custom-option admin__control-select'
]
);
if ($_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_DROP_DOWN) {
$select->setName('options[' . $_option->getId() . ']')->addOption('', __('-- Please Select --'));
} else {
$select->setName('options[' . $_option->getId() . '][]');
$select->setClass('multiselect admin__control-multiselect' . $require . ' product-custom-option');
}
foreach ($_option->getValues() as $_value) {
$priceStr = $this->_formatPrice(
[
'is_percent' => $_value->getPriceType() == 'percent',
'pricing_value' => $_value->getPrice($_value->getPriceType() == 'percent'),
],
false
);
// custom code
$defaultAttribute = array();
if($_value->getData('is_default') == true){
$defaultAttribute = ['selected' => 'selected'];
}
// custom code
$select->addOption(
$_value->getOptionTypeId(),
$_value->getTitle() . ' ' . strip_tags($priceStr) . '',
['price' => $this->pricingHelper->currencyByStore($_value->getPrice(true), $store, false),$defaultAttribute]
);
}
// custom code added
if ($_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_MULTIPLE) {
$extraParams = ' multiple="multiple"';
}
if (!$this->getSkipJsReloadPrice()) {
$extraParams .= ' onchange="opConfig.reloadPrice()"';
}
$extraParams .= ' data-selector="' . $select->getName() . '"';
$select->setExtraParams($extraParams);
if ($configValue) {
$select->setValue($configValue);
}
return $select->getHtml();
}
}
}
কাস্টমাইজযোগ্য বিকল্পগুলির জন্য আমি একটি ডিফল্ট মান সেট করতে এখানে পাওয়া সবচেয়ে পরিষ্কার উপায় :
(@ ট্রিটোফ্লাই উত্তরের ভিত্তিতে)
দ্রষ্টব্য : আমি ধরে নেব যে আপনি ইতিমধ্যে তৈরি মডিউলটিতে কাজ করব যা আমি কল করব Vendor_Module
।
is_default
কলাম যুক্ত করুনcatalog_product_option_type_value
অ্যাপ্লিকেশন / কোড / বিক্রেতা / মডিউল / সেটআপ / UpgradeSchema.php
<?php
namespace Vendor\Module\Setup;
use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
/**
* @codeCoverageIgnore
*/
class UpgradeSchema implements UpgradeSchemaInterface
{
/**
* {@inheritdoc}
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
*/
public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
if (version_compare($context->getVersion(), '2.0.1') < 0) {
$setup->getConnection()->addColumn(
$setup->getTable('catalog_product_option_type_value'),
'is_default',
[
'type' => \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
'length' => 1,
'unsigned' => true,
'nullable' => false,
'default' => '0',
'comment' => 'Defines if Is Default'
]
);
}
}
}
দ্রষ্টব্য : আপনার মডিউল অনুসারে সংস্করণ পরিবর্তন করতে ভুলবেন না
অ্যাপ্লিকেশন / কোড / বিক্রেতা / মডিউল, / etc / adminhtml / di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\CustomOptions">
<plugin name="vendor_module_custom_options_ui_plugin"
type="Vendor\Module\Plugin\CustomOptionsUiPlugin" />
</type>
</config>
অ্যাপ্লিকেশন / কোড / বিক্রেতা / মডিউল / প্লাগইন / CustomOptionsUiPlugin.php
<?php
namespace Vendor\Module\Plugin;
use Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\CustomOptions;
use Magento\Ui\Component\Form\Field;
use Magento\Ui\Component\Form\Element\Checkbox;
use Magento\Ui\Component\Form\Element\DataType\Number;
/**
* Data provider for "Customizable Options" panel
*/
class CustomOptionsUiPlugin
{
/**
* Field values
*/
const FIELD_IS_DEFAULT = 'is_default';
/**
* @param \Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\CustomOptions $subject
* @param bool $meta
* @return bool
*/
public function afterModifyMeta(CustomOptions $subject, $meta) {
$result = $meta;
$result[CustomOptions::GROUP_CUSTOM_OPTIONS_NAME]['children']
[CustomOptions::GRID_OPTIONS_NAME]['children']['record']['children']
[CustomOptions::CONTAINER_OPTION]['children']
[CustomOptions::GRID_TYPE_SELECT_NAME]['children']['record']['children']
[static::FIELD_IS_DEFAULT] = $this->getIsDefaultFieldConfig(70);
return $result;
}
/**
* Get config for checkbox field used for default values
*
* @param int $sortOrder
* @return array
*/
protected function getIsDefaultFieldConfig($sortOrder)
{
return [
'arguments' => [
'data' => [
'config' =>[
'label' => __('Default'),
'componentType' => Field::NAME,
'formElement' => Checkbox::NAME,
'dataScope' => static::FIELD_IS_DEFAULT,
'dataType' => Number::NAME,
'additionalClasses' => 'admin__field-small',
'sortOrder' => $sortOrder,
'value' => '0',
'valueMap' => [
'true' => '1',
'false' => '0'
]
],
],
],
];
}
}
দ্রষ্টব্য : এখানে আমরা উপাদানগুলির Magento\Ui\Component\Form\Element\Checkbox
পরিবর্তে ব্যবহার Magento\Ui\Component\Form\Element\Radio
করি কারণ মনে হয় ম্যাজেন্টো কখনই এটির ফর্ম উপাদানগুলিতে এটি সংজ্ঞায়িত করে না।
vendor\magento\module-ui\view\base\ui_component\etc\definition.xml
লাইনটি 112+ দেখুন
Magento\Catalog\Block\Product\View\Options\Type\Select
"ডিফল্ট উপাদান" হিসাবে যে উপাদানটি নির্বাচিত হয়েছে তা পরীক্ষা করতে ওভাররাইট করুন ।অ্যাপ্লিকেশন / কোড / বিক্রেতা / মডিউল, / etc / adminhtml / di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Catalog\Block\Product\View\Options\Type\Select"
type="Vendor\Module\Block\Rewrite\Catalog\Product\View\Options\Type\Select" />
</config>
অ্যাপ্লিকেশন / কোড / বিক্রেতা / মডিউল / ব্লক / লেখা / ক্যাটালগ / পণ্য / দেখুন / বিকল্পসমূহ / প্রকার / Select.php
<?php
namespace Vendor\Module\Block\Rewrite\Catalog\Product\View\Options\Type;
/**
* Product options text type block
*/
class Select extends \Magento\Catalog\Block\Product\View\Options\Type\Select
{
/**
* Return html for control element
*
* @return string
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
* @SuppressWarnings(PHPMD.NPathComplexity)
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
*/
public function getValuesHtml()
{
$_option = $this->getOption();
$configValue = $this->getProduct()->getPreconfiguredValues()->getData('options/' . $_option->getId());
$store = $this->getProduct()->getStore();
$this->setSkipJsReloadPrice(1);
// Remove inline prototype onclick and onchange events
if ($_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_DROP_DOWN ||
$_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_MULTIPLE
) {
$require = $_option->getIsRequire() ? ' required' : '';
$extraParams = '';
$select = $this->getLayout()->createBlock(
\Magento\Framework\View\Element\Html\Select::class
)->setData(
[
'id' => 'select_' . $_option->getId(),
'class' => $require . ' product-custom-option admin__control-select'
]
);
if ($_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_DROP_DOWN) {
$select->setName('options[' . $_option->getId() . ']')->addOption('', __('-- Please Select --'));
} else {
$select->setName('options[' . $_option->getId() . '][]');
$select->setClass('multiselect admin__control-multiselect' . $require . ' product-custom-option');
}
foreach ($_option->getValues() as $_value) {
$priceStr = $this->_formatPrice(
[
'is_percent' => $_value->getPriceType() == 'percent',
'pricing_value' => $_value->getPrice($_value->getPriceType() == 'percent'),
],
false
);
if($_value->getData('is_default') == true && !$configValue){
$configValue = $_value->getOptionTypeId();
}
$select->addOption(
$_value->getOptionTypeId(),
$_value->getTitle() . ' ' . strip_tags($priceStr) . '',
['price' => $this->pricingHelper->currencyByStore($_value->getPrice(true), $store, false)]
);
}
if ($_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_MULTIPLE) {
$extraParams = ' multiple="multiple"';
}
if (!$this->getSkipJsReloadPrice()) {
$extraParams .= ' onchange="opConfig.reloadPrice()"';
}
$extraParams .= ' data-selector="' . $select->getName() . '"';
$select->setExtraParams($extraParams);
if ($configValue) {
$select->setValue($configValue);
}
return $select->getHtml();
}
if ($_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_RADIO ||
$_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_CHECKBOX
) {
$selectHtml = '<div class="options-list nested" id="options-' . $_option->getId() . '-list">';
$require = $_option->getIsRequire() ? ' required' : '';
$arraySign = '';
switch ($_option->getType()) {
case \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_RADIO:
$type = 'radio';
$class = 'radio admin__control-radio';
if (!$_option->getIsRequire()) {
$selectHtml .= '<div class="field choice admin__field admin__field-option">' .
'<input type="radio" id="options_' .
$_option->getId() .
'" class="' .
$class .
' product-custom-option" name="options[' .
$_option->getId() .
']"' .
' data-selector="options[' . $_option->getId() . ']"' .
($this->getSkipJsReloadPrice() ? '' : ' onclick="opConfig.reloadPrice()"') .
' value="" checked="checked" /><label class="label admin__field-label" for="options_' .
$_option->getId() .
'"><span>' .
__('None') . '</span></label></div>';
}
break;
case \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_CHECKBOX:
$type = 'checkbox';
$class = 'checkbox admin__control-checkbox';
$arraySign = '[]';
break;
}
$count = 1;
foreach ($_option->getValues() as $_value) {
$count++;
$priceStr = $this->_formatPrice(
[
'is_percent' => $_value->getPriceType() == 'percent',
'pricing_value' => $_value->getPrice($_value->getPriceType() == 'percent'),
]
);
$htmlValue = $_value->getOptionTypeId();
if ($arraySign) {
$checked = is_array($configValue) && in_array($htmlValue, $configValue) ? 'checked' : '';
} else {
$checked = $configValue == $htmlValue ? 'checked' : '';
}
$dataSelector = 'options[' . $_option->getId() . ']';
if ($arraySign) {
$dataSelector .= '[' . $htmlValue . ']';
}
$selectHtml .= '<div class="field choice admin__field admin__field-option' .
$require .
'">' .
'<input type="' .
$type .
'" class="' .
$class .
' ' .
$require .
' product-custom-option"' .
($this->getSkipJsReloadPrice() ? '' : ' onclick="opConfig.reloadPrice()"') .
' name="options[' .
$_option->getId() .
']' .
$arraySign .
'" id="options_' .
$_option->getId() .
'_' .
$count .
'" value="' .
$htmlValue .
'" ' .
$checked .
' data-selector="' . $dataSelector . '"' .
' price="' .
$this->pricingHelper->currencyByStore($_value->getPrice(true), $store, false) .
'" />' .
'<label class="label admin__field-label" for="options_' .
$_option->getId() .
'_' .
$count .
'"><span>' .
$_value->getTitle() .
'</span> ' .
$priceStr .
'</label>';
$selectHtml .= '</div>';
}
$selectHtml .= '</div>';
return $selectHtml;
}
}
}
আপনার আপগ্রেডের setup_version
মধ্যেapp/code/Vendor/Module/etc/module.xml
আপনার আপডেট version
মধ্যে app/code/Vendor/Module/composer.json
নিম্নলিখিত আদেশগুলি চালান:
php bin/magento cache:clean
php bin/magento setup:upgrade