অঞ্চলটি খালি থাকলে আমি কীভাবে সঠিকভাবে সনাক্ত করব? [বন্ধ]


11

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

উদাহরণস্বরূপ, {% if page.local_tasks is not empty %}{{ page.local_tasks }}{% endif %}প্রিন্ট আউট <div class="region region-local-tasks"></div>

যদি আমি এই অঞ্চলে রেন্ডার themename_preprocess_page()সঙ্গে var_dump(drupal_render($variables['page']['highlighted']));আমি স্থানধারক টোকেন সঙ্গে SafeString পাবেন:

<div class="region region-highlighted"><drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="a8c34b5e"></drupal-render-placeholder></div>

সুতরাং, প্রযুক্তিগতভাবে অঞ্চলটি খালি নয় তবে আমি এটি সম্পর্কে কিছুই করতে পারি না।


আপনি page.local_tasksযখন মনে করেন এটি খালি থাকতে পারে তখন কী রয়েছে?
ক্লাইভ

এটি স্থানীয় কাজগুলি ব্লকের জন্য একটি অঞ্চল।

ঠিক আছে, তবে বস্তুটিতে কী রয়েছে? এটি খালি নয়, সুতরাং এতে কী কী অন্যান্য বৈশিষ্ট্য রয়েছে তা আপনাকে জানাতে পারে যে এতে কোনও সামগ্রী নেই (এতে কোনও স্ট্রিং রয়েছে বা মূলত একটি রেন্ডারযুক্ত অ্যারে রয়েছে?)
ক্লাইভ

আমার একই সমস্যা রয়েছে এবং এটি মনে হয় এটি একটি বাগ
ইউসুফ

উত্তর:


10

এর জন্য টিএল; ডিআর হ'ল অঞ্চলটি খালি কিনা তা নির্ভরযোগ্যতার সাথে পরীক্ষা করার কোনও উপায় নেই the

ড্রপাল ৮-এ যখন আমরা টেমপ্লেট স্তরে থাকি তখন আমরা জানাতে পারব না যে এই অঞ্চলে বিষয়বস্তু রয়েছে কি না কারণ সামগ্রীটি অলসভাবে রেন্ডার করা হয়েছে। এর জন্য ওপেন ড্রুপাল 8 ইস্যু রয়েছে

এটি অর্জনের জন্য আপনাকে সম্ভবত যা করতে হবে তা হ'ল সিএসএস লিখে যা অঞ্চলটি খালি কিনা তা পরীক্ষা করে। আপনি ব্যবহার করে চেষ্টা করতে পারেন : খালি ছদ্ম-নির্বাচক


আমি উপসংহারে পৌঁছেছি যে এই সমস্যাটি সমাধানের সর্বাধিক নির্ভরযোগ্য উপায় হুক_থেম_সাগেশনস হুক_ল্টারে টেম্পলেট পরামর্শ যুক্ত করা এবং টেম্পলেট থেকে অঞ্চলগুলি সম্পূর্ণরূপে সরিয়ে ফেলা যেখানে এটি দৃশ্যমান বলে মনে হয় না।
জোহান

10

ফিল্টারগুলি রেন্ডারের পরে প্রয়োগ করার চেষ্টা করুন, এটির মতো:

{% set has_sidebar_first = page.sidebar_first|render|striptags|trim is not empty %}
{% if has_sidebar_first %}
    {# ... #}
{% endif %}

এটি আমার জন্য কাজ করেছিল
অ্যান্ড্রু কোজরিজ

এটি বেশ কার্যকর।
একানাদিয়ান কোডার

2
এই পদ্ধতির কাজ হয় না কারণ এটি বিবেচনায় নেই যে কিছু অঞ্চল স্থানধারীদের মধ্যে রেন্ডার হয়ে যেতে পারে, যা পরবর্তী সময়ে প্রকৃত মার্কআপের সাথে প্রতিস্থাপন করা হবে। Html.html.twig ফাইলে কোনও অঞ্চল খালি আছে কি নেই তা নির্ধারণ করার কোনও উপায় নেই। আপনি যদি এই সমস্যার পুরো পটভূমিটি পড়তে চান তবে আমি এই দ্রুপাল কোর সংখ্যাটি
লরিউই

@ লৌরিই যেমন বলেছেন, এটি ড্রুপাল স্থানধারীদের সাথে কাজ করে না (ব্লকগুলিতে আমার মতামত সাধারণত strip_tagsফিল্টারের কারণে ফিল্টার হয়ে যায় )।
ডাকওয়ামাইন

2

ডানা আপনি সত্যিই করতে সক্ষম হতে হবে:

{% if page.local_tasks %}{{ page.local_tasks }}{% endif %}

তবে সম্ভবত পেজ.লোকাল_টাস্কসের মধ্যে কিছু রয়েছে (খালি মার্কআপের মতো)। নিম্নলিখিত চেষ্টা করুন:

{% if page.local_tasks|striptags|trim %}{{ page.local_tasks }}{% endif %}

সেই ডিবাগ স্নিপেট কিছু দেখায় না (অর্থাত্ প্রদর্শন করার মতো কিছুই নয়, ভেরিয়েবলটি খালি)।

আপনি যখন বলতে debugচান মানে dump? কি করলে কি হয় {% if page.local_tasks %}Crazy magic{% endif %}?
কুইনভিক্টোরিয়া

আপনার প্রশ্নটি পড়তে দেখছি page.local_tasksতা খালি নেই। এটি এইচটিএমএল পূর্ণ। আমি আমার উত্তর আপডেট করব।
কুইনভিক্টোরিয়া

বিষয়বস্তু থাকলে আপনার স্নিপেট কি দু'বার সামগ্রী সরবরাহ করে না? বা যদি এটি রেন্ডার করা হয় তবে এটি ক্যাশে হয়েছে এবং এটির কার্য সম্পাদনের কোনও প্রভাব নেই? এছাড়াও আমি বুঝতে পারি না কেন আমাকে কোনও কাজের চাপের প্রয়োজন do এটি কোর বাক্সের বাইরে কাজ করা উচিত। @ বেরডির এ সম্পর্কে কোন মন্তব্য?

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

1

এটি আমার পক্ষে কাজ করেছে।

{% if page.sidebar_first|render|striptags %}
<aside id="sidebar-first" class="sidebar sidebar-first layout-sidebar-first" role="complementary">{{ page.sidebar_first }}</aside>
{% endif %}

যথেষ্ট সহজ।


আমি নিশ্চিত নই তবে এটি আপনার সাইডবারটি দুবার রেন্ডার করে তুলবে (একবার মূল্যায়নের জন্য এবং অন্য সময় প্রদর্শনের জন্য)।
জিগেরিয়াস

-1

পরিবর্তে আপনার Rendererপরিষেবাটি ব্যবহার করা উচিতdrupal_render() যা হ্রাস করা হয়েছে, তাই:

$output = \Drupal::service('renderer')->renderRoot($some_array)

এটি drupal-render-placeholderআউটপুটটিতে ট্যাগ উত্পন্ন করতে এড়াতে পারে ।

অনুরূপ ইস্যু: ড্রুপাল-রেন্ডার-প্লেসোল্ডারকে ম্যানুয়ালি কীভাবে প্রতিস্থাপন করবেন?


-1

এটা চেষ্টা কর :

 {% if page.local_tasks|render|striptags|trim  is not empty %}
    {{ page.local_tasks }}
 {% endif %}

-1

এটি আসলে আমার ক্ষেত্রে কাজ করে

{% if page.sidebar_second|render|striptags('<drupal-render-placeholder>')|trim|length > 0 %}

স্ট্রিপট্যাগগুলি রাখার জন্য ট্যাগগুলির একটি স্ট্রিং গ্রহণ করে, তাই আপনি যা সামগ্রীহীন ট্যাগগুলি আশা করেন তা যেমন যোগ করতে পারেন <form><img>ইত্যাদি can


-1

টুইগ ডিবাগিং সক্ষম করা থাকলে নিম্নলিখিতটিও কাজ করে:

{% set sidebarLength = page.sidebar_first|render|trim|striptags|length %}
{% if sidebarLength > 1 %}
  {% set has_sidebar_first = page.sidebar_first %}
{% else %}
  {% set has_sidebar_first = null %}
{% endif %}

-3

অঞ্চলটি খালি আছে কি না তা সনাক্ত করার জন্য এই কোডটি নয়:

।% যদি page.local_tasks%}
   । {page.local_tasks}
{% শেষ যদি %}

উপরের কোডে এটি পরীক্ষা করে যে লোকাল_টাস্ক অঞ্চলটি খালি আছে কিনা এবং খালি থাকলে তা অঞ্চলটি প্রিন্ট করবে না


1
কাজ করা হয়নি, এটি সর্বদা সত্য
ইউসুফ

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