Magento2: পণ্য পৃষ্ঠাতে ট্যাব ক্রম পরিবর্তন করুন


16

আমি ম্যাজেন্টো ২ তে প্রোডাক্ট পৃষ্ঠায় থাকা ট্যাবগুলির ক্রম পরিবর্তন করার চেষ্টা করছি Def ডিফল্ট Details|More Information|Reviews

আমি চেষ্টা করেছিলাম:

বিক্রেতা / থিম / Magento_Catalog / লেআউট / catalog_product_view.xml

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <move element="product.info.description" destination="product.info.details" after="-" />
    </body>
</page>

তবে এটি কাজ করে না, এবং উপাদানগুলিকে সরানোর জন্য প্রস্তাবিত উপায়টি স্থির করে। আমি ট্যাবগুলি ট্যাব অঞ্চল থেকে অন্য অঞ্চলে সরানো এবং পাশাপাশি নতুন ট্যাবগুলি যুক্ত করতে সক্ষম হয়েছি, তবে আমি ট্যাবগুলির ক্রমটি নিয়ন্ত্রণ করতে পারি না।

আমার ধারণা এটির সাথে কিছু করার আছে group="detailed_info"; দেখে মনে হচ্ছে যে ম্যাজেন্টো এক্সএমএলে এই বৈশিষ্ট্যটির সাথে লেআউট উপাদানগুলিকে ধরে এবং ট্যাবগুলি তৈরি করতে এটির মধ্য দিয়ে লুপ করে।

মডিউলটি আবার না লিখে ট্যাবের ক্রম পরিবর্তন করার কোনও উপায় আছে কি?


আপনি কি এর উত্তর খুঁজে পেয়েছেন? আমারও একই সমস্যা হচ্ছে
অ্যালেক্স

দুঃখিত, আমার এখনও কোনও উত্তর নেই।
andyjv

আমি সরানোর উপাদানটি ব্যবহার করার চেষ্টা করেছি এবং আপনার মত একই সিদ্ধান্তে এসেছি, সেগুলি ট্যাবগুলির বাইরে সরানো যেতে পারে তবে সেগুলির মধ্যে অর্ডার দেওয়া হয়নি।
বেন ক্রুক

এটি সামান্য কৌশল দ্বারা বিন্যাস দ্বারা করা যেতে পারে। এখানে দেখানো হয়েছে: magento.stackexchange.com/questions/106412/…
স্কাইমেসনার

@ অ্যান্ডজেভি দয়া করে এখানে সমাধানটি সন্ধান করুন, এটি আপনাকে আউটপুটটি অর্জন করতে সহায়তা করতে পারে। magento.stackexchange.com/a/242709/52244
কানহাইয়া

উত্তর:


22

পরবর্তী সময়ে নতুন ট্যাব যুক্ত করার ক্ষেত্রে এবং এই ট্যাবগুলির অগ্রাধিকার / ক্রম পরিবর্তন করার ক্ষেত্রে আমার পদ্ধতির বিষয়টি একটু আলাদা তবে সম্ভবত আরও ভবিষ্যতের প্রমাণ।

আমি আমার থিমস এক্সএমএল ফাইলগুলিতে এক্সএমএল ফাইলের মাধ্যমে প্রতিটি ট্যাবের জন্য একটি আর্গুমেন্ট পাস করেছি

...
<arguments>
    <argument name="priority" xsi:type="string">REPLACE WITH SOME NUMBER</argument>
</arguments>
...

সুতরাং আমার থিমস এক্সএমএল ফাইলটি দেখতে এরকম কিছু দেখাচ্ছে:

<referenceBlock name="product.info.details">
        <referenceBlock name="product.info.description">
            <arguments>
                <argument name="priority" xsi:type="string">1</argument>
            </arguments>
        </referenceBlock>
        <referenceBlock name="product.attributes">
            <arguments>
                <argument name="priority" xsi:type="string">3</argument>
            </arguments>
        </referenceBlock>
        <referenceBlock name="reviews.tab">
            <arguments>
                <argument name="priority" xsi:type="string">4</argument>
            </arguments>
        </referenceBlock>
        <!-- MY OWN CUSTOM BLOCK ON THE SECOND POSITION -->
        <block class="Magento\Catalog\Block\Product\View\Description" name="product.features" as="features" template="product/view/features.phtml" group="detailed_info">
            <arguments>
                <argument translate="true" name="title" xsi:type="string">Features</argument>
                <argument name="priority" xsi:type="string">2</argument>
            </arguments>
        </block>
        <!-- MY OWN CUSTOM BLOCK ENDS HERE -->
    </referenceBlock>

আরও আমাদের এডজাস্ট করতে হবে details.phtml, তাই এটি থেকে অনুলিপি করুন

<magento_root>/vendor/magento-catalog-view/frontend/templates/product/view/details.phtml

প্রতি

<magento_root>/app/design/frontend/<Vendor>/<theme>/Magento_Catalog/templates/product/view/details.phtml

দয়া করে মনে রাখবেন যে details.phtmlভবিষ্যতে ম্যাজেন্টো সংস্করণ বা প্যাচগুলিতে ম্যাজেন্টোর নিজস্ব পরিবর্তন করা যেতে পারে। এই পরিবর্তনগুলি আপনার থিমের ক্ষেত্রেও প্রয়োগ করা উচিতdetails.phtml

এক্সএমএল ফাইলের মাধ্যমে আমরা যে অগ্রাধিকারটি দিয়েছি সেগুলি এখন আমাদের পাওয়া দরকার।

<?php
/**
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */

// @codingStandardsIgnoreFile

?>
<?php if ($detailedInfoGroup = $block->getGroupChildNames('detailed_info', 'getChildHtml')):?>
    <div class="product info detailed">
        <?php $layout = $block->getLayout(); ?>
        <?php
            # We create a new array;
            $newPriority = array();
            # forEach the original $detailedInfoGroup Array;
            foreach ($detailedInfoGroup as $name){
                $alias = $layout->getElementAlias($name);
                # Get the priority which we applied via xml file
                # If no priority is applied via xml file then just set it to 10
                $priority = $block->getChildData($alias,'priority') ? $block->getChildData($alias,'priority') : '10';
                # variables pushed into new two-dimensional array
                array_push($newPriority, array($name, $priority));
            }
            # Sort array by priority
            usort($newPriority, function($a, $b) {
                return $a['1'] <=> $b['1'];
            });
        ?>
        <div class="product data items" data-mage-init='{"tabs":{"openedState":"active"}}'>
            <?php
            # Delete the original forEach statement
            #foreach ($detailedInfoGroup as $name)
            foreach ($newPriority as $name):?>
                <?php
                    # rename $name[0] to $name because it's a two-dimensional array
                    # No further changes to this file, it works as explained
                    $name = $name[0];
                    $html = $layout->renderElement($name);
                    if (!trim($html)) {
                        continue;
                    }
                    $alias = $layout->getElementAlias($name);
                    $label = $block->getChildData($alias, 'title');
                ?>
                <div class="data item title"
                     aria-labeledby="tab-label-<?php /* @escapeNotVerified */ echo $alias;?>-title"
                     data-role="collapsible" id="tab-label-<?php /* @escapeNotVerified */ echo $alias;?>">
                    <a class="data switch"
                       tabindex="-1"
                       data-toggle="switch"
                       href="#<?php /* @escapeNotVerified */ echo $alias; ?>"
                       id="tab-label-<?php /* @escapeNotVerified */ echo $alias;?>-title">
                        <?php /* @escapeNotVerified */ echo $label; ?>
                    </a>
                </div>
                <div class="data item content" id="<?php /* @escapeNotVerified */ echo $alias; ?>" data-role="content">
                    <?php /* @escapeNotVerified */ echo $html; ?>
                </div>
            <?php endforeach;?>
        </div>
    </div>
<?php endif; ?>

সুতরাং আপনি দেখুন: আপনাকে কেবল কয়েকটি লাইন যুক্ত করতে হবে এবং সর্বদা এক্সএমএল ফাইলের মাধ্যমে ট্যাবগুলির অগ্রাধিকার / ক্রম পরিবর্তন করতে পারেন, আপনাকে details.phtmlভবিষ্যতে আর পরিবর্তন করতে হবে না।


দয়া করে কীভাবে "আরও তথ্য" ট্যাবটির নীচে আমরা "বিশদ" ট্যাবটির সামগ্রী প্রদর্শন করতে পারি?
জয়

আপনার প্রশ্নটি মূল প্রশ্নের উল্লেখ করছে না। আপনার নতুন টিকিট খোলা উচিত। যাইহোক: আপনি আপনার থিমের ক্যাটালগ_প্রোডাক্ট_ভিউ.এক্সএমএল (যেমন বর্ণনা-বৈশিষ্ট্য-সংযুক্তি.পিএইচটিএমএল) এ কোনও নতুন পিএইচটিএমএল ফাইলের উল্লেখ করতে পারেন এবং মূল descrption.phtml এবং বৈশিষ্ট্য.পিটিএমটিএল থেকে সামগ্রীটি আটকান।
জুহানিক্স

আমি উভয় ফাইলের সামগ্রী একটিতে আটকে দিয়েছি এবং এক্সএমএল ফাইলগুলিতে এইরূপে কল করেছি: <संदर्भব্লক নাম = "product.info.details"> <ব্লক শ্রেণি = "ম্যাজেন্টো \ ক্যাটালগ \ ব্লক \ পণ্য \ দেখুন \ বিবরণ" নাম = "product.info .description.attributes "টেমপ্লেট =" পণ্য / দর্শন / বিবরণ-বৈশিষ্ট্য-সংযুক্ত.পিএইচটিএমএল "গোষ্ঠী" "বিশদ_ইনফো"> <দ্য ট্রাম্পলেটগুলি = "সত্য" নাম = "শিরোনাম" এক্সসি: টাইপ = "স্ট্রিং"> আরও তথ্য </ translation>> <<<<<<<<<<<< << রেফারেন্সব্লক> তবে ফাঁকা সাইট এবং কেবলমাত্র ট্যাবগুলির সামগ্রী প্রদর্শন করুন। কি অনুপস্থিত?
জয়

আমি এখানে প্রশ্ন যুক্ত করেছি: magento.stackexchange.com/q/157376/29175
জয়

@জাহানিক্স এর জন্য আপনাকে এমন একটি টেমপ্লেট এগিয়ে নিয়ে যেতে হবে যা পরে ম্যাজেন্টো প্যাচে পরিবর্তন করা যেতে পারে। আমার উত্তরটি দেখুন যা কোনও মূল ফাইলকে সংশোধন করে না। আশা করি, এটি মূল সমস্যা যা প্যাচ পেতে পারে।
লর্ডজার্ডেক

14

বিশদ পৃষ্ঠাতে ট্যাবিংয়ের অবস্থান পরিবর্তন করার জন্য, বৈশিষ্ট্যের পরে বা আগে এক্সএমএল কনফিগারেশন ফাইল ব্যবহার করা এই ক্ষেত্রে সহায়তা করে না।

আপনাকে টেমপ্লেট ফাইল থেকে পরিবর্তন করতে হবে।

কোর থেকে আপনার থিম থেকে বিশদ.এফটিএমএল ফাইল অনুলিপি করুন,

app/design/frontend/Packagename/themename/Magento_Catalog/templates/product/view/details.phtml

এই ফাইলের অভ্যন্তরে, আপনি সমস্ত ট্যাবগুলির নাম, মুদ্রণ_আর ($ বিশদব্যবস্থাগ্রুপ) ব্যবহার করে আপনার মতো মান পেতে হবে,

Array
(
    [0] => product.info.description
    [1] => product.attributes
    [2] => reviews.tab
)

আপনার প্রয়োজন অনুযায়ী ফাইলে ভবিষ্যদ্বাণী করার আগে নতুন অ্যারেতে সেট করতে হবে,

<?php $newOrderTabbing = array('product.info.description',,'reviews.tab','product.attributes'); //custom add ?>,

যোগ করুন <?php foreach ($newOrderTab as $name):?>,

বিশদে সম্পূর্ণ কোড.এফটিএমটিএল নীচের মত,

<?php
/**
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */

// @codingStandardsIgnoreFile

?>
<?php if ($detailedInfoGroup = $block->getGroupChildNames('detailed_info', 'getChildHtml')):?>
    <?php $newOrderTabbing = array('product.info.description','reviews.tab','product.attributes'); //custom added position ?>
    <div class="product info detailed">
        <?php $layout = $block->getLayout(); ?>
        <div class="product data items" data-mage-init='{"tabs":{"openedState":"active"}}'>
            <?php foreach ($newOrderTabbing as $name): //custom arrayname?>
                <?php
                    $html = $layout->renderElement($name);
                    if (!trim($html)) {
                        continue;
                    }
                    $alias = $layout->getElementAlias($name);
                    $label = $block->getChildData($alias, 'title');
                ?>
                <div class="data item title"
                     aria-labeledby="tab-label-<?php /* @escapeNotVerified */ echo $alias;?>-title"
                     data-role="collapsible" id="tab-label-<?php /* @escapeNotVerified */ echo $alias;?>">
                    <a class="data switch"
                       tabindex="-1"
                       data-toggle="switch"
                       href="#<?php /* @escapeNotVerified */ echo $alias; ?>"
                       id="tab-label-<?php /* @escapeNotVerified */ echo $alias;?>-title">
                        <?php /* @escapeNotVerified */ echo $label; ?>
                    </a>
                </div>
                <div class="data item content" id="<?php /* @escapeNotVerified */ echo $alias; ?>" data-role="content">
                    <?php /* @escapeNotVerified */ echo $html; ?>
                </div>
            <?php endforeach;?>
        </div>
    </div>
<?php endif; ?>

ধন্যবাদ রাকেশ জেসাদিয়া, এটি কবজির মতো কাজ করছে ...!
সরফরাজ সিপাই

13

ম্যাজেন্টো 2.3.1 বা উপরে আমরা এক্সএমএল কনফিগারেশনে sort_orderআর্গুমেন্ট ব্যবহার করতে পারিapp/design/frontend/Packagename/themename/Magento_Catalog/layout/catalog_product_view.xml

<referenceBlock name="product.info.description">
    <arguments>
        <argument name="title" translate="true" xsi:type="string">Description</argument>
        <argument name="sort_order" xsi:type="string">20</argument>
    </arguments>
</referenceBlock>

এছাড়াও টেমপ্লেট ফাইলে " getGroupChildNames" দিয়ে " getGroupSortedChildNames" পদ্ধতিটি আপডেট করার বিষয়টি নিশ্চিত করুন ( আপনি যদি এটি ওভাররাইড করছেন ) " app/design/frontend/Packagename/themename/Magento_Catalog/templates/product/view/details.phtml"।

পুরাতন পদ্ধতি

<?php if ($detailedInfoGroup = $block->getGroupChildNames('detailed_info', 'getChildHtml')):?>

আপডেট পদ্ধতি

<?php if ($detailedInfoGroup = $block->getGroupSortedChildNames('detailed_info', 'getChildHtml')):?>

আপনি যদি Magento\Catalog\Block\Product\View\Details.phpব্লক শ্রেণিকে ওভাররাইড করে থাকেন তবে আপনার ব্লক শ্রেণিতেও সেই আপডেট পদ্ধতিটি থাকা উচিত " getGroupSortedChildNames"।


1
এটি অবশ্যই ২.৩.১ এর পরে সঠিক উত্তর।
গীত

এটি আমার জন্য ২.৩.২-এ কাজ করে, অনেক অনেক ধন্যবাদ!
জারেড চু

3

আমি জানি যে এই প্রশ্নের অন্যান্য উত্তরও রয়েছে, তবে সেগুলি আমার স্বাদে খুব আক্রমণাত্মক ছিল। ইস্যুটি অনুসন্ধান করে, ম্যাজেন্টো একটি উপাদানের সাথে একটি পৃথক "গোষ্ঠী" বৈশিষ্ট্য যুক্ত করে এবং বিন্যাসে লোড হওয়া ক্রমে শিশুদের সেই বৈশিষ্ট্যে যুক্ত করে, বাচ্চাদের অ্যারে থেকে সম্পূর্ণ পৃথক করে যাতে উপাদানগুলির সাজানো অ্যারে থাকে। এটি ঠিক করার জন্য, আমি একটি সহজ প্লাগইন লিখেছিলাম যা গ্রুপ বাচ্চাদের পুনরুদ্ধার করার সময় বাছাই করা ঠিক করে:

class Structure
{
    /**
     * Re-orders the array of group children based on the sort order defined on the parent's children
     *
     * @param \Magento\Framework\Data\Structure $subject
     * @param callable $proceed
     * @param $parentId
     * @param $groupName
     * @return array
     */
    function aroundGetGroupChildNames( \Magento\Framework\Data\Structure $subject, callable $proceed, $parentId, $groupName )
    {
        $sortedList = [];

        // Go ahead and get all the children
        $groupChildNames = $proceed( $parentId, $groupName );

        // If there was no group children, just leave early
        if (empty( $groupChildNames ))
        {
            return $groupChildNames;
        }

        // Go through the order of the parent's children and if it's in the list of group children aggregated above,
        // add it to our own list
        foreach ($subject->getElement( $parentId )['children'] as $childId => $childAlias)
        {
            if (!in_array( $childId, $groupChildNames ))
            {
                continue;
            }

            array_push( $sortedList, $childId );
        }

        return $sortedList;
    }
}

এটি এখন আপনার প্রত্যাশার মতো লেআউট এক্সএমএলে স্ট্যান্ডার্ড beforeএবং afterবৈশিষ্ট্যগুলি ব্যবহার করে ট্যাবগুলি অর্ডার করার অনুমতি দেবে এবং সম্ভবত ভবিষ্যতে ম্যাজেন্টো প্যাচগুলিতে পরিবর্তন করার প্রয়োজন হবে না।


শক্তিশালী এবং সম্মানিত লর্ডজার্ডেক সঠিক উত্তর দিয়েছেন। উপরের উত্তরগুলির বেশিরভাগ উত্তর যেমন একটি টেম্পলেটটিতে এত যুক্তি যুক্ত করা কেবল নতুন ম্যাজেন্টো সংস্করণগুলিতে আপডেট করার সময় কেবল সমস্যা জিজ্ঞাসা করছে।
নাথন টুমবস

এটি আমার ম্যাজেন্টো ২.২.৪ স্টোরের জন্য ব্যবহার করেছেন! ম্যাজিকের মতো কাজ করেছে!
ইসহু

3

সাজানোর আদেশ যুক্তি ব্যবহার করে অন্য উপায়।

ফাইল পাথ - app\design\frontend\<companyNAme>\<ThemeName>\Magento_Catalog\layout\catalog_product_view.xml

Product.info.details রেফারেন্স ব্লক ধারকটির ভিতরে বাছাইয়ের অর্ডার যুক্ত করুন।

উদাহরণ কোড

<block class="Magento\Catalog\Block\Product\View" name="shipping_tab" template="Magento_Catalog::product/view/shipping.phtml" group="detailed_info" >
    <arguments>
    <argument translate="true" name="title" xsi:type="string">Shipping</argument>
    <argument name="sort_order" xsi:type="string">10</argument>
    </arguments>
</block>

আপনার অর্ডার অনুসারে বাছাই অর্ডার যুক্তির মান 10, 20, 30 এ পরিবর্তন করুন।


1
উদাহরণ সহ নিখুঁত উত্তরটি sort_orderআমার জন্য গুরুত্বপূর্ণ ছিল, +1 আমার দিনকে :) বানিয়েছে :)
সাগরপঞ্চল

2

আমি মনে করি আপনার কেবল নিজের পছন্দ অনুসারে এগুলি যুক্ত করা দরকার। আমার জন্য, আমি এই ক্রমে 4 টি ট্যাব ব্যবহার করছি:

  1. বিস্তারিত
  2. পণ্য ট্যাগ
  3. কাস্টম ট্যাব 1
  4. কাস্টম ট্যাব 2

আমার কাস্টম মডিউলে আমি এই লেআউট ফাইলটি তৈরি করেছি: ক্যাটালগ_প্রডাক্ট_ভিউ.এক্সএমএল এই সামগ্রী সহ:

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="product.info.details">
            <block class="Magento\Catalog\Block\Product\View" name="tab.tags" template="Godogi_Utilities::catalog/product/tab_tags.phtml" group="detailed_info" >
                <arguments>
                    <argument translate="true" name="title" xsi:type="string">Product Tags</argument>
                </arguments>
            </block>
            <block class="Magento\Catalog\Block\Product\View" name="tab.custom.tab.one" template="Godogi_Utilities::catalog/product/custom_tab_1.phtml" group="detailed_info" >
                <arguments>
                    <argument translate="true" name="title" xsi:type="string">Custom Tab 1</argument>
                </arguments>
            </block>
            <block class="Magento\Catalog\Block\Product\View" name="tab.custom.tab.n" template="Godogi_Utilities::catalog/product/custom_tab_n.phtml" group="detailed_info" >
                <arguments>
                    <argument translate="true" name="title" xsi:type="string">Custom Tab N</argument>
                </arguments>
            </block>
        </referenceBlock>
    </body>
</page>

আপনি দেখতে পাচ্ছেন যে আমি মাত্র 3 টি ট্যাব যুক্ত করেছি কারণ বিশদ ট্যাবটি ইতিমধ্যে বিদ্যমান। ফলস্বরূপ আমি এই ক্রমে ট্যাবগুলি পেয়েছি:

  1. পণ্য ট্যাগ
  2. কাস্টম ট্যাব 1
  3. কাস্টম ট্যাব 2
  4. বিস্তারিত

যা আমি চেয়েছিলাম তা নয়, এখন আমার সমাধানটি হল আবার বিশদ ট্যাব যুক্ত করা, যাতে আমার লেআউট ফাইলটি এরকম হবে:

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="product.info.details">
            <block class="Magento\Catalog\Block\Product\View\Description" name="product.info.description" template="product/view/attribute.phtml" group="detailed_info">
                <arguments>
                    <argument name="at_call" xsi:type="string">getDescription</argument>
                    <argument name="at_code" xsi:type="string">description</argument>
                    <argument name="css_class" xsi:type="string">description</argument>
                    <argument name="at_label" xsi:type="string">none</argument>
                    <argument name="title" translate="true" xsi:type="string">Details</argument>
                </arguments>
            </block>
            <block class="Magento\Catalog\Block\Product\View" name="tab.tags" template="Godogi_Utilities::catalog/product/tab_tags.phtml" group="detailed_info" >
                <arguments>
                    <argument translate="true" name="title" xsi:type="string">Product Tags</argument>
                </arguments>
            </block>
            <block class="Magento\Catalog\Block\Product\View" name="tab.custom.tab.one" template="Godogi_Utilities::catalog/product/custom_tab_1.phtml" group="detailed_info" >
                <arguments>
                    <argument translate="true" name="title" xsi:type="string">Custom Tab 1</argument>
                </arguments>
            </block>
            <block class="Magento\Catalog\Block\Product\View" name="tab.custom.tab.n" template="Godogi_Utilities::catalog/product/custom_tab_n.phtml" group="detailed_info" >
                <arguments>
                    <argument translate="true" name="title" xsi:type="string">Custom Tab N</argument>
                </arguments>
            </block>
        </referenceBlock>
    </body>
</page>

এখন আমি যে আদেশটি চাই তা পেয়েছি :) এখানে চিত্র বর্ণনা লিখুন


1

সবচেয়ে সহজ এবং সর্বোত্তম উপায় হল আমার মতে লর্ডজার্ডেকের সমাধান একটি প্লাগইন সহ my বিক্রেতা / মডিউল / ইত্যাদি / অগ্রণী / di.xML আপডেট করার পরে

    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">

    ...

        <type name="Magento\Framework\Data\Structure">
            <plugin name="vendor_sort_tabs" type="Vendor\Module\Plugins\Structure" sortOrder="0"/>
        </type>

   ...

    </config>

সবকিছু ইচ্ছামতো কাজ করেছে।

ক্লিন কোডের জন্য @ লর্ডজার্ডকে ধন্যবাদ!


0

আমি যে সমাধানটি ব্যবহার করেছি তা এখানে। এটি বিবরণ এবং বৈশিষ্ট্য ট্যাব অদলবদল করে যদি সেগুলি উভয়ই উপলব্ধ থাকে। এটি আলটিমো থিমটি ব্যবহার করছে। তবে আপনি পয়েন্ট পাবেন। চুমু খেতে হবে।

<?php 
$detailedInfoGroup = $block->getGroupChildNames('detailed_info', 'getChildHtml');

if ($detailedInfoGroup[0] == 'product.info.description' && $detailedInfoGroup[1] == 'product.attributes') {
    $detailedInfoGroup[0] = 'product.attributes';
    $detailedInfoGroup[1] = 'product.info.description';
}

// rest of the code to look through $detailedInfoGroup
?>

0

সমস্যাটি আমার সমাধান টেমপ্লেট পরিবর্তন করতে হয় details.phtml তাই এটি লেআউট থেকে শিশুদের ব্লক পায়।

$blocks = $layout->getChildBlocks($block->getNameInLayout());

এইভাবে এটি করে, এটি প্রদত্ত আদেশকে সম্মান করে পর এবং আগে modificators।

<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

// @codingStandardsIgnoreFile

?>
<?php if ($detailedInfoGroup = $block->getGroupChildNames('detailed_info', 'getChildHtml')):?>
    <div class="product info detailed">
        <?php $layout = $block->getLayout(); ?>
        <?php $blocks = $layout->getChildBlocks($block->getNameInLayout());?>
        <div class="product data items" data-mage-init='{"tabs":{"openedState":"active"}}'>
            <?php foreach($blocks as $alias=>$child_block):?>
                <?php if(in_array($child_block->getNameInLayout(),$detailedInfoGroup)):?>
                    <?php
                        $html = $child_block->toHtml();
                        if (!trim($html)) {
                            continue;
                        }       
                        $label = $child_block->getData('title');
                    ?>
                    <div class="data item title"
                         aria-labeledby="tab-label-<?= /* @escapeNotVerified */ $alias ?>-title"
                         data-role="collapsible" id="tab-label-<?= /* @escapeNotVerified */ $alias ?>">
                        <a class="data switch"
                           tabindex="-1"
                           data-toggle="switch"
                           href="#<?= /* @escapeNotVerified */ $alias ?>"
                           id="tab-label-<?= /* @escapeNotVerified */ $alias ?>-title">
                            <?= /* @escapeNotVerified */ $label ?>
                        </a>
                    </div>
                    <div class="data item content" id="<?= /* @escapeNotVerified */ $alias ?>" data-role="content">
                        <?= /* @escapeNotVerified */ $html ?>
                    </div>
                <?php endif; ?>
            <?php endforeach;?>
        </div>
    </div>
<?php endif; ?>

আমি এখনও getGroupChildNames দ্বারা সরবরাহিত অ্যারে ব্যবহার করিব্লকটি গ্রুপের অন্তর্ভুক্ত কিনা তা যাচাই করার জন্য ।

if(in_array($child_block->getNameInLayout(),$detailedInfoGroup))


0

আমি থিমটিতে কাজ করতে চাইনি, আমি 'getGroupChildNames' পদ্ধতির আচরণটি পরিবর্তন করতে চেয়েছিলাম। টেমপ্লেটটি সংশোধিত হয়ে গেলেও এই পদ্ধতির কাজ করা উচিত।

আমি এটি ক্যাটালগ_প্রডাক্ট_ভিউ.এক্সএমএলে যুক্ত করেছি:

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column"
  xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
  <body>
    <!-- CODE TO REORDER PRODUCT TABS -->
    <block class="Dsy\Ton\Block\Product\View\Description" name="product.info.details.new" template="Magento_Catalog::product/view/details.phtml">
        <!-- ADD MORE BOCKS IF NEEDED -->
    </block>
    <move element="product.info.details.new" destination="content" after="product.info.details"/> 

    <move element="product.info.description" destination="product.info.details.new" after="-"/>
    <move element="product.attributes" destination="product.info.details.new" after="-"/> 

    <referenceBlock name="product.info.details" remove="true"/>
    <!-- CODE TO REORDER PRODUCT TABS -->
  </body>

তারপরে, 'getGroupChildNames' আচরণ পরিবর্তন করতে একটি ব্লক তৈরি করুন:

<?php

namespace My\Module\Block\Product\View;

use Magento\Catalog\Model\Product;

class Description extends \Magento\Catalog\Block\Product\View\Description
{
    public function getGroupChildNames($groupName)
    {
        if ('detailed_info' === $groupName) {
            return [
                // here you can change the order
                'product.attributes',
                'product.info.description',
            ];
        }

        return parent::getGroupChildNames($groupName);
    }
}

এখানেই শেষ.


0

লর্ডজারডেকের সর্বোত্তম উত্তর রয়েছে তবে এটি মূলত একটি বাগ এবং এটির মূল স্থির করা উচিত।

আমি যে সমস্যার সন্ধান পেয়েছি তার সহজ সমাধানটি হ'ল: ম্যাজেন্টো_গ্যাটালগ :: প্রোডাক্ট / ভিউ / বিশদ.ফিটটিএমএল টেমপ্লেটকে ওভাররাইড করুন এবং 10 লাইনে প্রথম পিএইচপি শর্তের পরে:

if ($detailedInfoGroup = $block->getGroupChildNames(...

অর্ডার পরিবর্তন করতে নিম্নলিখিত কোড যুক্ত করুন:

$_prepend = array_reverse(['product.overview.description']);
foreach ($_prepend as $_name) {
    $k = array_search($_name,$detailedInfoGroup);
    if ( $k !== false) {
        unset($detailedInfoGroup[$k]);
        array_unshift($detailedInfoGroup,$_name);
    }
}

এটি অর্ডার পরিবর্তন করবে এবং সংজ্ঞায়িত অ্যারের শুরুতে pre _প্রেডে তালিকাবদ্ধ সমস্ত ট্যাবকে ধাক্কা দেবে ।


0

মনে হচ্ছে উপরের সমস্তটি আর প্রাসঙ্গিক নয়। ম্যাজেন্টো ২.৩.১ হিসাবে আমরা sort_orderএক্সএমএল কনফিগারেশনে আর্গুমেন্ট ব্যবহার করতে পারি ।


0

একটি প্লাগইন একটি দুর্দান্ত সমাধান। তবে আপনি এখনও এটিতে উন্নতি করতে পারেন। আপনি যখনই ট্যাবগুলিকে পুনঃক্রম করতে চান তখন আপনি একটি আলাদা প্লাগইন লিখতে চান না। আপনি যা করতে চান তা হল xML এ অর্ডার সেট করুন। এটার মত:

<referenceBlock name="product.info.details">
        <referenceBlock name="product.info.description">
            <arguments>
                <argument name="priority" xsi:type="number">1</argument>
            </arguments>
        </referenceBlock>
        <referenceBlock name="product.attributes">
            <arguments>
                <argument name="priority" xsi:type="number">3</argument>
            </arguments>
        </referenceBlock>
        <referenceBlock name="reviews.tab">
            <arguments>
                <argument name="priority" xsi:type="number">4</argument>
            </arguments>
        </referenceBlock>
        <!-- MY OWN CUSTOM BLOCK ON THE SECOND POSITION -->
        <block class="Magento\Catalog\Block\Product\View\Description" name="product.features" as="features" template="product/view/features.phtml" group="detailed_info">
            <arguments>
                <argument translate="true" name="title" xsi:type="string">Features</argument>
                <argument name="priority" xsi:type="number">2</argument>
            </arguments>
        </block>
        <!-- MY OWN CUSTOM BLOCK ENDS HERE -->
    </referenceBlock>

এবং তারপরে, টেমপ্লেটটি পরিবর্তনের পরিবর্তে, একটি প্লাগইন তৈরি করুন যা ম্যাজেন্টোকে priorityএক্সএমএল কনফিগারেশনে ব্যবহৃত আর্গুমেন্টটি বুঝতে সক্ষম করবে :

class TabOrder
{
    const TABS_BLOCK_NAME = 'product.info.details';
    const ORDER_ARGUMENT_NAME = 'priority';

    public function afterGetGroupChildNames(
        \Magento\Catalog\Block\Product\View\Description $subject,
        array $result
    ) {
        if ($subject->getNameInLayout() === self::TABS_BLOCK_NAME) {
            foreach ($result as $blockName) {
                // get priority for each block and include it in modifiedResult
                $alias = $subject->getLayout()->getElementAlias($blockName);

                // 100 default value guarantees the tab without priority argument goes last
                $blockPosition =
                    $subject->getChildData($alias, self::ORDER_ARGUMENT_NAME) ?? 100;
                $modifiedResult[] = array(
                    $blockName,
                    $blockPosition);
            }

            // order elements from $modifiedResult by priority
            usort($modifiedResult, function ($a, $b) {
                return $a[1] <=> $b[1];
            });

            // remove priority and leave original values only
            array_walk($modifiedResult, function (&$value, $key) {
                $value = $value[0];
            });

            return $modifiedResult;
        }

        return $result;
    }
}

এবং অবশেষে প্লাগইনটি অবশ্যই Magento\Catalog\Block\Product\View\Descriptiondi.xML ফাইলে শ্রেণিতে প্রয়োগ করতে হবে।


0

পণ্য পৃষ্ঠাতে ট্যাবগুলির ক্রমান্বয়ে ম্যাজেন্টো 2 এর জন্য।

আপনি সহজেই সহজ উপায়ে ট্যাব ক্রম কাস্টমাইজ করতে পারেন।

  1. এতে বিশদ.এফটিএমএল ফাইল তৈরি করুন

অ্যাপ্লিকেশন / ডিজাইন / ফ্রন্টএন্ড / বিক্রেতা / থিম / Magento_Catalog / টেমপ্লেট / পণ্য / দৃশ্য /

Details.phtml ফাইলটি যদি ইতিমধ্যে বিদ্যমান থাকে তবে এটি আপডেট করুন update

  1. ফোরচ লুপের আগে এই কোডটি যুক্ত করুন। "$ বিস্তারিতInfoGroup" অ্যারের সংজ্ঞা দিন।

আসল কোড:

<?php if ($detailedInfoGroup = $block->getGroupChildNames('detailed_info', 'getChildHtml')):?>
    <div class="product info detailed">
        <?php $layout = $block->getLayout(); ?>
        <div class="product data items" data-mage-init='{"tabs":{"openedState":"active"}}'>
            <?php foreach ($detailedInfoGroup as $name):?>
                <?php
                    $html = $layout->renderElement($name);
                    if (!trim($html)) {
                        continue;
                    }
                    $alias = $layout->getElementAlias($name);
                    $label = $block->getChildData($alias, 'title');
                ?>
                <div class="data item title"
                     aria-labeledby="tab-label-<?= /* @escapeNotVerified */ $alias ?>-title"
                     data-role="collapsible" id="tab-label-<?= /* @escapeNotVerified */ $alias ?>">
                    <a class="data switch"
                       tabindex="-1"
                       data-toggle="switch"
                       href="#<?= /* @escapeNotVerified */ $alias ?>"
                       id="tab-label-<?= /* @escapeNotVerified */ $alias ?>-title">
                        <?= /* @escapeNotVerified */ $label ?>
                    </a>
                </div>
                <div class="data item content" id="<?= /* @escapeNotVerified */ $alias ?>" data-role="content">
                    <?= /* @escapeNotVerified */ $html ?>
                </div>
            <?php endforeach;?>
        </div>
    </div>
<?php endif; ?> 

কোড যুক্ত করার পরে:

<?php if ($detailedInfoGroup = $block->getGroupChildNames('detailed_info', 'getChildHtml')):?>
    <div class="product info detailed">
        <?php $layout = $block->getLayout(); ?>
        <div class="product data items" data-mage-init='{"tabs":{"openedState":"active"}}'>
            <?php $detailedInfoGroup = ["product.info.description", "product.attributes", "reviews.tab"]; ?>
            <?php foreach ($detailedInfoGroup as $name):?>
                <?php
                    $html = $layout->renderElement($name);
                    if (!trim($html)) {
                        continue;
                    }
                    $alias = $layout->getElementAlias($name);
                    $label = $block->getChildData($alias, 'title');
                ?>
                <div class="data item title"
                     aria-labeledby="tab-label-<?= /* @escapeNotVerified */ $alias ?>-title"
                     data-role="collapsible" id="tab-label-<?= /* @escapeNotVerified */ $alias ?>">
                    <a class="data switch"
                       tabindex="-1"
                       data-toggle="switch"
                       href="#<?= /* @escapeNotVerified */ $alias ?>"
                       id="tab-label-<?= /* @escapeNotVerified */ $alias ?>-title">
                        <?= /* @escapeNotVerified */ $label ?>
                    </a>
                </div>
                <div class="data item content" id="<?= /* @escapeNotVerified */ $alias ?>" data-role="content">
                    <?= /* @escapeNotVerified */ $html ?>
                </div>
            <?php endforeach;?>
        </div>
    </div>
<?php endif; ?>

এবং পণ্য পৃষ্ঠাতে কাস্টম ট্যাব যুক্ত করুন এই লিঙ্কটি দেখুন

ম্যাজেন্টো 2 - এমন পণ্য ট্যাব তৈরি করুন যা কাস্টম বৈশিষ্ট্যটি প্রদর্শন করে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.