আমি কীভাবে প্রোগ্রামক্রমে একটি ব্লক স্থাপন করব?


10

ইউআই থেকে আপনি যে কোনও অঞ্চলে একটি ব্লক যুক্ত করতে পারেন:

  1. প্রশাসনে যান -> কাঠামো -> ব্লক বিন্যাস (/ প্রশাসক / কাঠামো / ব্লক) to
  2. অঞ্চলের নামের পাশাপাশি "প্লেস ব্লক" বোতামে ক্লিক করুন।

আমি একই জিনিসটি করতে চাই তবে প্রোগ্রামগতভাবে। আমি কীভাবে কোনও অঞ্চলে একটি বিদ্যমান ব্লক যুক্ত করব এবং এটি সংরক্ষণ করব? তারপরে এই ব্লকটি সেই অঞ্চলে প্রদর্শিত হবে এবং ব্লক বিন্যাসের পৃষ্ঠাতে পাওয়া উচিত।


ব্লকটি তৈরি করার পরে আপনি ব্লকের অবস্থানটি পুনরায় সাজিয়ে
ক্রেজিউরবিক্সফ্যান

আমি ধরে নিয়েছি যে আপনি "একটি অঞ্চলে একটি ব্লক বরাদ্দ করুন" ভুল টাইপ করেছেন।
সিলেফেন

@ আইসক্রিমজেলি আমি যা করার চেষ্টা করছি এটি প্রোগ্রামিকভাবে এটি করার জন্য। সিলেফেন, হ্যাঁ এটাই আমার অর্থ% -)
জেএমজিয়ার

@ শ্যাশনকন ধন্যবাদ, এটি একই রকম, তবে ঠিক একই নয়। আমি উত্তর কোথাও খুঁজে পেয়েছি।
jmzea

উত্তর:


9

একটি প্লাগইন ব্লক সরবরাহ করতে আপনি সেটিংসের একটি অ্যারে তৈরি করতে এবং এটিকে \Drupal\block\Entity\Block::create()ব্লক অবজেক্ট তৈরি করতে এবং দৃষ্টান্তটি সংরক্ষণ করতে পারেন pass

উদাহরণস্বরূপ আপনি যদি সেভেন থিমটিতে একটি ডেভেল এক্সিকিউট পিএইচপি ব্লক যুক্ত করতে চান:

$values = array(
  // A unique ID for the block instance.
  'id' => 'devel_execute_php_1',
  // The plugin block id as defined in the class.
  'plugin' => 'devel_execute_php',
  // The machine name of the theme region.
  'region' => 'content',
  'settings' => array(
    'label' => 'Execute PHP',
  ),
  // The machine name of the theme.  
  'theme' => 'seven',
  'visibility' => array(),
  'weight' => 100,
);
$block = \Drupal\block\Entity\Block::create($values);
$block->save();

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

অন্য প্রশ্ন হিসাবে এটি জিজ্ঞাসা করুন। মন্তব্যগুলি প্রশ্ন জিজ্ঞাসার জন্য নয়।
শন কন

এটি ইতিমধ্যে সেখানে। drupal.stackexchange.com/questions/207042/…
মুদাসসর আলী

এখানে আইডি কি ? এটি কি ব্লকের নামের মতো?
ক্রেজিরুবিক্সফান

@ রাবারডাকসাইকিং আমি বিশ্বাস করি idযতক্ষণ না আপনি অনন্য হিসাবে আপনার পছন্দসই নাম রাখতে পারবেন । উদাহরণস্বরূপ, আপনি এটির মডিউলটির নাম দিয়ে এটি শুরু করতে চাইতে পারেন
প্যারাগ

7

আপনি টুইগ টুইক মডিউলটি ব্যবহার করেন :

টুইগ টুইকের মডিউলটি কিছু কার্যকর ফাংশন এবং ফিল্টারগুলির সাথে একটি টুইগ এক্সটেনশন সরবরাহ করে যা বিকাশকারীর অভিজ্ঞতা উন্নত করতে পারে।

এবং তারপরে আপনার টুইগ টেম্পলেট অঞ্চলে:

{{ drupal_block('block_id') }}

এই সমাধানটির সাথে সমস্যাটি হ'ল টুইগ টুইটগুলি আপনার এখনও অবরুদ্ধ করা প্রয়োজন এবং তারপরে এটি 'অক্ষম করুন'।
কথিত

6

একটি ব্লক (যা "ব্লক টাইপ", কনফিগারেশন এবং বসানো) প্রত্যেকটি উদাহরণস্বরূপ একটি কনফিগ সত্তা হল: \Drupal\block\Entity\Block। সুতরাং আপনাকে যা করতে হবে তা হ'ল সঠিক বিশদ সহ এই সত্তার একটি নতুন উদাহরণ তৈরি করা এবং আপনি শেষ করেছেন।

এটি করা যায় তবে ক্রেজি জটিল, আপনার প্লাগইন সিস্টেম, ব্লক প্লাগইন সিস্টেম এবং আরও অনেক কিছু বুঝতে হবে।

আপনি \Drupal\block\BlockForm::submitFormএটির জন্য অনুভূতি পেতে একবার দেখে নিতে পারেন \Drupal\simpletest\BlockCreationTrait::placeBlock। আপনি যদি ভাবতে পারেন যে এটি যদি আপনার সত্যই প্রয়োজন হয় তবে ব্লকের দৃশ্যমানতা বেশ জটিল।


4
দৃশ্যমানতার শর্ত ছাড়াও, আমি মনে করি না যে এটি এত জটিল। \ দ্রুপাল \ সর্বাধিক সহজ \ ব্লকক্রিয়াশন ট্রাইট :: প্লেস ব্লক () সম্ভবত এটির চেয়ে ভাল উদাহরণ, আপনি কিছু রফতানি কনফিগারেশন ফাইলও আমদানি করতে পারেন।
বেরদির

@ বার্ডির পরীক্ষার বৈশিষ্ট্যের লিঙ্কটির জন্য ধন্যবাদ, এটি যুক্ত করেছে। যেহেতু দ্রুপাল 8 এখনও তরুন, তাই অনেক লোক প্লাগইন সিস্টেম সম্পর্কে অনেক কিছু জানেন না এবং ডকুমেন্টেশন আরও ব্যবহারের ক্ষেত্রে ইত্যাদি ব্যবহার করতে পারে, যা এর সাথে কাজ করার জন্য অনেকগুলি ডেভসকে সময় দিতে পারে।
googletorp

ফেলিক্স ইভের সর্বোত্তম উত্তর রয়েছে। এটা পাগল জটিল নয়।
kratos

@ ক্রেটোস ফেলিক্স যে উত্তর সরবরাহ করেছে তা বাস্তবে কীভাবে একটি "ব্লক" প্রোগ্রামযুক্তভাবে রাখবেন সে প্রশ্নটি সমাধান করে না, পরিবর্তে কনফিগার ফাইল ব্যবহার করে। কনফিগারেশন কেবলমাত্র ড্রশ, কনফিগার সিঙ্ক্রোনাইজেশন ইন্টারফেস বা মডিউল ইনস্টলেশনের মাধ্যমে আমদানি করা যায়। যদি এটি হওয়ার প্রয়োজন হয়, রানটাইম চলাকালীন সময়ে, fx পোস্ট বিভাগের সম্মুখভাগ নোডের প্রকারের সংরক্ষণ করুন, এই কৌশলটি ব্যবহার করা অকার্যকর হবে :)
googletorp

4

আমি কেবল ডি 8 শিখছি তবে মনে হচ্ছে প্রোগ্রামক্রমে ব্লক স্থাপনের একটি আরও সহজ উপায় খুঁজে পেয়েছি (গুগলরপের উত্তর পড়ার পরে এটি বেশ ভয় পেয়েছিল!)

যখন আমি আমার কাস্টম মডিউলটি সক্ষম করে যখন ব্লকটি সংজ্ঞায়িত করে আমি চাইতাম যে ব্লকটি স্বয়ংক্রিয়ভাবে সঠিক অঞ্চলে স্থাপন করা হবে। এটি অর্জনের জন্য আমি যে পদক্ষেপগুলি ব্যবহার করেছি তা হ'ল:

  1. মডিউল সক্ষম করুন এবং ইউআই ব্যবহার করে ব্লকটি রাখুন /admin/structure/block
  2. একক আইটেম কনফিগার রফতানির পৃষ্ঠাতে যান admin/config/development/configuration/single/export
  3. কনফিগারেশন টাইপ ব্লক নির্বাচন করুন এবং কনফিগারেশন নামের জন্য আপনি সবেমাত্র ইউআই ব্যবহার করে যে ব্লকটি রেখেছেন তা নির্বাচন করুন এবং তারপরে উত্পন্ন কোডটি অনুলিপি করুন।
  4. আপনার মডিউলে ফোল্ডারটি তৈরি করুন /config/install/
  5. উত্পন্ন কোড টেক্সেরিয়া এর অধীনে এটি আপনাকে যে ফাইল ফাইলটি ব্যবহার করতে হবে তা জানিয়ে দেয়। /config/installডিরেক্টরিতে এই ফাইলটি তৈরি করুন এবং সেখানে কোডটি অনুলিপি করুন।
  6. এখন আপনি যখন নিজের মডিউলটি আনইনস্টল করবেন এবং তারপরে এটি পুনরায় সক্ষম করবেন তখন স্বয়ংক্রিয়ভাবে ব্লকটি স্থাপন করা হবে।

অন্যান্য বিকাশকারী বা পরিবেশের জন্য কাজ করার জন্য আপনাকে কি ইউআইডি অপসারণ করতে হবে না?
Powpow12

হ্যাঁ - ইউইউডি অপসারণ করা ভাল ধারণা idea
ফেলিক্স ইভ

আপনি ড্রুপাল কনসোলটিও
Beau

3

সত্তাকে কীভাবে পরিচালনা করতে হবে তার জন্য ধন্যবাদ উত্তরটি পেয়েছি : ড্রুপাল 8 এ প্রোগ্রামিকভাবে ব্লক করুন

use Drupal\block\Entity\Block;

$block = Block::load('sitebranding');
$block->setRegion('content');
$block->save();

এই আমি অবিকল ধন্যবাদ খুঁজছিলাম ছিল, @ jmzea!
Beau 21

2

উপরের উদাহরণটি যথেষ্ট কাছাকাছি কিন্তু এখনও সঠিক নয়। ধারণাটি হ'ল আপনাকে নিজের ব্লকের উদাহরণের নিজস্ব আইডি নিয়ে আসতে হবে (আমার ক্ষেত্রে devel_execute_php_1112 (সম্ভবত আমি এটিকে 1112 বার কাজ করার চেষ্টা করেছি, এটি রহস্যই থাকবে))) এবং তারপরে আসল ব্লক আইডি (যেটি সেই টীকাতে কাস্টম ব্লকের জন্য ঘোষিত হয়েছে) এবং থিম। তারপরে কেবল অঞ্চলটি সেট করুন এবং আপনি যেতে ভাল। কাঙ্ক্ষিত অঞ্চলের অধীনে একটি ব্লকের উদাহরণ তৈরি করেছে।

$blockEntityManager = \Drupal::service('entity.manager')->getStorage('block');
$block = $blockEntityManager->create(
  array(
      'id'=> 'devel_execute_php_1112',
      'plugin' => 'devel_execute_php',
      'theme' => 'seven'
  )
);
$block->setRegion('content');
$block->save();

edit1: আমি পরে উপরের মন্তব্যটি পরে দেখেছি - এবং এটি ঠিক। এটি কেবল পরিষ্কার নয় যে আইডিটি এমন কিছু যা আপনার সামনে আসতে হবে। আমার খোঁড়া মন্তব্যের জন্য মুক্তি হিসাবে আমি কীভাবে কাস্টম ব্লক সত্তার একটি ব্লক উদাহরণ তৈরি করতে পারি তার একটি সমাধান পোস্ট করব:

$blockEntityManager = \Drupal::service('entity.manager')->getStorage('block');
$block = $blockEntityManager->create(
  array(
      'id'=> 'ggggggggsssssss',
      'plugin' => 'block_content:79d53b4e-9e60-4f97-befc-101da919bb7a',
      'theme' => 'visitb_he_theme'
  )
);
$block->setRegion('content');

মূলত একই তবে প্লাগইনের জন্য আপনি ব্লক কনটেন্ট লেখেন: uuid_of_custom_ block_entity_instance

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