কাস্টম ব্লক টেম্পলেট ফাইলের ভেরিয়েবল পাস করুন


11

আমি ড্রুপাল 8 এ কাস্টম সামগ্রী সহ আমার কাস্টম ব্লক তৈরি করতে চাই, শুরুতে আমি এতে কেবল সাধারণ পাঠ্য সহ ব্লক তৈরি করি এবং সঠিকভাবে কাজ করি, আমার সমস্যাটি কীভাবে আমি আমার কাস্টম ভেরিয়েবলটিকে এতে পাস করতে পারি? আমি এটি সম্পর্কে কিছু টিউটোরিয়াল দেখেছি, আমার মডিউলটির নাম tcdevএবং এটি .moduleফাইলের বিষয়বস্তু ।

function tcdev_theme($existing, $type, $theme, $path) {
    return array('tcdev' =>
        array(
            'variables' => array(
                'title' => 'Default title',
                'description' => null
            ),
            'template' => 'block--sliderblock'
        )
    );
}

এবং আমার SliderBlock.php

    namespace  Drupal\tcdev\Plugin\Block;
use Drupal\Core\block\BlockBase;


/**
 * Provides a 'SliderBlock' block.
 *
 * @Block(
 * id = "slider_block",
 * admin_label = @Translation("Slider Block"),
 * )
 */

class SliderBlock extends BlockBase{
    /**
     * {@inheritdoc}
     */
    public function build(){
        return array(
            '#title' => 'my title ',
            '#description' => 'my custom desc'
        );
}
}

এবং অবশেষে আমার টেম্পলেট ফাইল block--sliderblock.html.twig

  <h2>My Custom Block{{ title }}-{{ description }}</h2>

তবে ফলাফলটি কেবল "আমার কাস্টম ব্লক-"। সমস্যাটি হল ভেরিয়েবলগুলি টেমপ্লেট ফাইলে পাস হচ্ছে না, আমার দোষ কোথায়?

কোন সাহায্যের প্রশংসা করুন

উত্তর:


15

আপনার রিটার্ন অ্যারেতে একটি #themeকী নেই। সুতরাং এই মুহুর্তে আপনি কোনও টেম্পলেট ফাইল ব্যবহার করছেন না।

এবং আপনার সম্ভবত বহিরাগত ব্লক এবং ব্লকের ভিতরে থাকা বিষয়বস্তুগুলির মধ্যে মিশ্রণ রয়েছে। আপনার টেম্পলেটটির অভ্যন্তরে নামটি রয়েছে টিসিদেব, কারণ এটি সেই নাম যা আপনি অ্যারের শীর্ষে সংজ্ঞায়িত করেছেন *_theme()এবং tcdev.html.twig যেখানে আপনার ভেরিয়েবলগুলি শেষ হবে।

আপনার কোডটি নীচের মত লাগবে।

function tcdev_theme($existing, $type, $theme, $path) {
  return array('tcdev' =>                  // this is the name of the template
           array(
            'variables' => array(
                'title' => 'Default title',
                'description' => null
            ),
        )
    );
}

SliderBlock.php

namespace  Drupal\tcdev\Plugin\Block;
use Drupal\Core\block\BlockBase;


/**
 * Provides a 'SliderBlock' block.
 *
 * @Block(
 * id = "slider_block",
 * admin_label = @Translation("Slider Block"),
 * )
 */

class SliderBlock extends BlockBase{
    /**
     * {@inheritdoc}
     */
    public function build() {
        return array(
            '#theme' => 'tcdev',
            '#title' => 'my title ',
            '#description' => 'my custom desc'
        );
   }
}

tcdev.html.twig

  <h2>My Custom Block{{ title }}-{{ description }}</h2>

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

প্রথম লিঙ্কে কাস্টম টেম্পলেটটি হচ্ছে tcdev.html.twig। দ্বিতীয় লিঙ্কটিতে আপনি যে পদ্ধতিটি ব্যবহার করে যাচ্ছেন তা হ'ল ব্লক - স্লাইডারব্লক.ইচটিএমএল.ভিগ এর জন্য।


তবে block--sliderblock.html.twigরেন্ডার করা হয়েছে, সমস্যাটি কীভাবে আমার ভেরিয়েবলটিকে এতে পাস করবেন !!!? আপনি আমার কোড অনুসারে আমাকে কি পরামর্শ দিচ্ছেন? ? আপনার মনোযোগের জন্য tnx
ইউসুফ

আপনি একটি ব্লকের ভিতরে ভেরিয়েবলের সামগ্রী চান? তারপরে এটি কোনও ব্লক টেমপ্লেটের সাথে সংযুক্ত নয়, কারণ এটি ব্লকের বাইরের জন্য। ( block--sliderblock.html.twigরেন্ডার করা হয়েছে, কারণ আপনি কোনও থিমের পরামর্শের নাম ব্যবহার করেছেন, ব্লকটি পুরো ফাঁকা থাকলেও এটি রেন্ডার হবে, আপনি এটি চেষ্টা করতে পারেন)
4k4

জিনিসগুলি পরিষ্কার করার জন্য আমি আপনার কোডটি পরিবর্তন করার চেষ্টা করেছি, আশা করি এটি কার্যকর হয়, এটি ডিবাগ করেনি।
4k4

আমি আপনার কোডটি প্রয়োগ করি, ক্যাশেটি পুনর্নির্মাণ করি, তবে এখনও পড়েছি block--sliderblock.html.twigএবং এটিতে কিছুই পাস হয়নি। আমি ডিবাগ তথ্য সক্ষম করি এবং ডিবাগ তথ্য হ'ল<!-- END OUTPUT from 'themes/bootstrap/templates/block/block--system-branding-block.html.twig' <!-- FILE NAME SUGGESTIONS: x block--sliderblock.html.twig * block--slider-block.html.twig * block--tcdev.html.twig * block.html.twig --> <!-- BEGIN OUTPUT from 'themes/gttc_2016/templates/block--sliderblock.html.twig' --> <h2>Block-</h2>
ইউসেফ

আপনার ভেরিয়েবলগুলি পড়ে না block--sliderblock.html.twig। এই টেম্পলেটগুলি ভেরিয়েবলগুলির নিজস্ব সেট সহ কাজ করে। (আপনি যদি এই টুইগটি ব্যবহার করতে চান তবে আপনাকে এটিকে মূল বা বেস থিম থেকে অনুলিপি করতে হবে এবং তারপরে আপনি দেখতে পাবেন যে ভেরিয়েবলগুলি ভিতরে রয়েছে)। বিল্ড ফাংশনের রেন্ডার অ্যারেতে সেট করা আপনার ভেরিয়েবলগুলি শেষ হবে tcdev.html.twig। আপনি এই টুইগ ফাইল তৈরি করেছেন?
4k4

3

যাতে আমি খুঁজে পেয়েছি, আপনি একটি কাস্টম ব্লক (মডিউল) টেমপ্লেট দিয়ে একটি ডিফল্ট ব্লক টেম্পলেটটি ওভাররাইট করতে চান এবং তারপরে আপনার ভেরিয়েবলগুলি এতে পাস করতে চান, প্রথমে আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনার টেম্পলেটটি সঠিকভাবে ওভাররাইট করা উচিত কারণ আপনার বর্তমান ব্লক টেম্পলেটটি আপনার থেকে প্রসারিত বলে মনে হচ্ছে থিম ডিরেক্টরি (মডিউল নয়):

<!-- BEGIN OUTPUT from 'themes/gttc_2016/templates/block--sliderblock.html.twig' -->

এটি করার জন্য প্রথমে templates/আপনার মডিউলগুলির মূল হিসাবে ডাইরেক্টরি তৈরি করা উচিত এবং তারপরে আপনার টেম্পলেটটি সেখানে রাখা উচিত।

এখন ড্রুপালকে আপনি আপনার মডিউলে টেম্পলেটটি সংরক্ষণ করুন। মধ্যে your_module.moduleএই ফাংশন যোগ করুন:

function YOUR_MODULE_theme($existing, $type, $theme, $path) {
  return array(
    'block__my_module' => array(
      'render element' => 'elements',
      'template' => 'block--my-module',
      'base hook' => 'block'
    )
  );
}

আপনার টুইগ ফাইলটি কোথায় রাখবেন এবং কী নাম দিয়েছিলেন সে সম্পর্কে অবশেষে সাবধান হন। আপনার মডিউল ডিরেক্টরিতে একটি টেম্পলেট ডিরেক্টরি তৈরি করুন, এবং _থিম ফাংশন নামটি এর সাথে প্রতিস্থাপন করুন -:
mymodule-block.html.twig

ক্যাশে সাফ করতে ভুলবেন না।


Nicensinএই পোস্টে লেখা উত্তরের সাহায্যে :
ড্রুপাল 8 কাস্টম ব্লক (মডিউল) টিগ টেম্পলেট ফাইল তৈরি করুন


1
ওপিতে চলকগুলি কী সম্পর্কে জিজ্ঞাসা করেছিল?
লেইম্যানেক্স

1

আমিও এই জায়গায় পৌঁছেছি। ভেরিয়েবলগুলি ব্লক টেম্পলেটটিতে পৌঁছেছে বলে মনে হয় না। আমার প্রায় আপনার মতো একই কোড রয়েছে, আমার ক্ষেত্রে আমি টুইগ ডিবাগ সক্ষম করেছি এবং পরিষেবাদি.আইএমএলে ক্যাশে অক্ষম করেছি। এমনকি ক্যাশে সাফ করার পরেও আমি এই সমস্যাটি নিয়ে আসছিলাম তবে একবার আমার দেব পরিবেশে এই কনফিগারটি সক্রিয় করার পরে সমাধান হয়ে গেল।

twig.config:    
# Not recommended in production environments
# @default false
debug: true
# Not recommended in production environments
# @default null
auto_reload: true
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.