এমন সহজ পদ্ধতি যেখানে আপনার এইচটিএমএল টেমপ্লেটগুলি ব্যবহার করার দরকার নেই
বিনয় কপ্পকে ধন্যবাদ আমি অবশেষে এর উত্তর পেয়েছি, এটি আমার আগের হ্যাকি ওয়ার্কারআউন্ডের চেয়ে অনেক সহজ (আমি নোডগুলি পরিষ্কার করছিলাম)। আপনাকে যা করতে হবে তা হ'ল 'ko'
নির্ভরতা হিসাবে সংজ্ঞায়িত করা এবং একটি রিটার্ন ফাংশনের অভ্যন্তরে আপনার কোড যুক্ত করা।
নীচে একটি সাধারণ উদাহরণ যা জেএসএনের মাধ্যমে পাস করা কিছু পাঠ্যকে রেন্ডার করে।
app/code/VENODR/MODULE/view/frontend/templates/knockout-example.phtml
এখানে আমরা ম্যাজেন্টোকে আমাদের উপাদানগুলির ব্যাপ্তিটি বলি (এটি অবশ্যই data-bind: "scope: 'example-scope'"
কোনও অতিরিক্ত ডেটা মেলতে এবং পাস করতে হবে This এটি বেস URL হতে পারে, একটি সাধারণ বার্তা, আপনার পছন্দসই যে কোনও কিছুই I've উদাহরণ হিসাবে আমি একটি স্ট্রিং (পিএইচপি প্রতিধ্বনি) পাস করেছি I've
<script type="text/x-magento-init">
{
"*": {
"Magento_Ui/js/core/app": {
"components": {
"example-scope": {
"component": "VENDOR_MODULE/js/knockout-example",
"exampleMessage": "<?= __('Hello Magento Stack Exchange!') ?>"
}
}
}
}
}
</script>
<div data-bind="scope: 'example-scope'">
<h2 data-bind="text: message"></h2>
</div>
এবং এখানে আমরা আমাদের জাভাস্ক্রিপ্ট লিখি।
app/code/VENDOR/MODULE/view/frontend/web/js/knockout-example.js
define(['ko'], function(ko) {
return function(config) {
this.message = ko.observable(config.exampleMessage);
}
});
ফলাফল
---------------------
আপনার এইচটিএমএল টেমপ্লেটগুলি ব্যবহার করার প্রয়োজন যেখানে পদ্ধতি
আপনি যদি ম্যাজেন্টো 2 / নকআউটের মধ্যে এইচটিএমএল টেম্প্লেটিং সিস্টেমটি ব্যবহার করতে চান (যা আমি মনে করি যে আপনার কাজের কোনও উল্লেখযোগ্য অংশের প্রয়োজন হবে) আপনার সরল উত্তরের (নীচে) তুলনায় আপনাকে কিছু পরিবর্তন করতে হবে।
আপনার যদি টেমপ্লেটের কার্যকারিতা প্রয়োজন না হয় তবে আমার পুরানো সরলিকৃত উত্তরে স্ক্রোল করুন।
এই উদাহরণের জন্য আমি যে ফাইলগুলি ব্যবহার করছি তা হ'ল:
app/design/frontend/VENDOR/THEME/Magento_Cms/templates/knockout.phtml
app/design/frontend/VENDOR/THEME/Magento_Cms/web/js/knockout-example.js
app/design/frontend/VENDOR/THEME/Magento_Cms/web/template/test.html
পিএইচটিএমএল টেম্পলেট ফাইল
আমাদের পিএইচটিএমএল টেমপ্লেটে একমাত্র পরিবর্তন হ'ল ফাংশনটিতে কল getTemplate()
:
<script type="text/x-magento-init">
{
"*": {
"Magento_Ui/js/core/app": {
"components": {
"example-scope": {
"component": "Magento_Cms/js/knockout-example",
"exampleMessage": "<?= __('Hello Magento Stack Exchange!') ?>"
}
}
}
}
}
</script>
<div data-bind="scope: 'example-scope'">
<h2 data-bind="text: message"></h2>
<!-- ko template: getTemplate() --><!-- /ko -->
</div>
জেএস (উপাদান) ফাইল
জেএস ফাইলটিতে আপনাকে কিছু পরিবর্তন করতে হবে, আমি নীচে সেগুলি বিস্তারিত করব।
define(['ko', 'uiComponent'], function(ko, Component) {
'use strict';
return Component.extend({
defaults: {
exampleMessage: 'Hello?',
template: 'Magento_Cms/test'
},
initialize: function() {
this._super();
console.log(this.exampleMessage);
this.message = ko.observable(this.exampleMessage);
}
});
});
1 - আপনার রিটার্ন ফাংশনটির এখন ui কম্পোনেন্ট মডিউলটি প্রসারিত করতে হবে:
return Component.extend({
...
});
2 - আপনার একটি initialize
ফাংশন এবং কল যুক্ত করতে হবে this._super()
। this._super()
একই নামের সাথে প্যারেন্ট উপাদানটির ফাংশনটি কল করবে। এই ইনস্ট্যান্সের মধ্যে তাই আমি মনে করি এটা ডাকব initialize
এর uiComponent
।
initialize: function() {
this._super();
...
}.
3 - alচ্ছিক - আপনি এখানে আপনার উপাদানগুলির জন্য কিছু ডিফল্টও সেট করতে পারেন, আমি মনে করি এটি অনুসরণ করা ভাল অভ্যাস যা এটি আপনার উপাদানটিকে কাজ করা সহজ করে তোলে। আপনি যখন এটি পুনঃব্যবহার করেন আপনি হয় হয় ডিফল্ট রাখতে পারেন বা আপনি যদি এটি কাস্টমাইজ করতে চান তবে উপাদানটি পরিবর্তন না করেই নতুন যুক্তি দিয়ে কল করতে পারেন।
উদাহরণস্বরূপ, আপনি যদি জেএসের ডিফল্টগুলি লক্ষ্য করেন তবে এটি পৃষ্ঠাটি সেট exampleMessage
করে 'Hello?'
এখনও এটি পাঠ্যটিকে রেন্ডার করে Hello Magento Stack Exchange!
। কারণ আমি exampleMessage
যখন উপাদানটি কল করেছি তখন আমি পিএইচটিএমএল ফাইলটিতে ওভাররাইট করেছি।
এইচটিএমএল টেমপ্লেট
আমি এখনও খনন করতে এবং এইচটিএমএল টেমপ্লেটগুলি সক্ষম কি তা দেখতে পাচ্ছি, আমি অনুমান করি নকআউট জেএস ডকুমেন্টেশনে উল্লিখিত বৈশিষ্ট্যগুলি এগুলিকে বেশ নমনীয় করে তুলতে এখানে ব্যবহার করা যেতে পারে।
আমি আপাতত কিছু লোরেম আইপসাম পাঠ্য যুক্ত করেছি, এইচটিএমএল টেমপ্লেটগুলি কী করতে পারে তা আমি একবার বের করে ফেললে আমি সম্ভবত আরও একটি প্রশ্ন / উত্তর সরবরাহ করব।
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Asperiores assumenda beatae blanditiis culpa cupiditate doloremque, expedita ipsum iure magni minima modi molestiae nulla optio porro ratione reiciendis repellat soluta voluptatum!
ফলাফল, এবং ডিফল্টগুলি ওভাররাইট করা
পূর্বে উল্লিখিত হিসাবে আপনি দেখতে পাচ্ছেন যে আমি exampleMessage
টেম্পলেটটির মধ্যে ওভাররাইট করেছি , আপনি এটি পাঠ্যটি পড়ার মতো কাজ করতে দেখতে পাচ্ছেন Hello Magento Stack Exchange
।
আমি যদি টেমপ্লেট ফাইলে ওভাররাইড সরিয়ে ফেলি তবে এর ডিফল্টতে exampleMessage
ফিরে আসবে Hello?
। যদিও এটি মুছে ফেলার var/view_preprocessed
এবং pub/static/frontend
পরে এটি পরিবর্তন করার পরে আমার দরকার ছিল না। আমি মনে করি ম্যাজেন্টো মানটি ক্যাশে করেছিল।