টুইগ টেমপ্লেটে থিম সম্পদের পথে পাথ পান


22

একটি টুইগ টেমপ্লেটে কোনও চিত্রের পাথ পাওয়ার বিষয়ে আমার একটি প্রশ্ন রয়েছে। চিত্রটি কোনও ক্ষেত্র বা কোনও কিছুর জন্য বরাদ্দ করা হয়নি। কেবলমাত্র একটি স্থিতিশীল চিত্র যা "MYTHEME / চিত্র / আইকন / আমার-আইকন.পিএনজি" তে সঞ্চিত আছে।

ড্রুপাল 7-এ আমি নীচের কোডটি সহ আমার নোড.টম্প্লেটে পাথটি পেয়েছি:

<img src="<?php print base_path() . path_to_theme(); ?>/image/icons">/my-icon.png

এটি ড্রুপাল 8-এ কীভাবে কাজ করবে? আমি একটি পরিবর্তনশীল পাস করার চেষ্টা করেছি template_preprocess_node()

MYTHEME.theme:

$variables['images_path'] = \Drupal::theme()->getActiveTheme()->getPath() . '/image/';

ট্যুইগ টেম্পলেট:

<img src="{{ images_path  ~ 'icons/' ~ 'my-icon.png' }}">

এটি কাজ করে না। কোনও পিএইচপি ত্রুটি নেই, তবে পাথটি ভুলভাবে বলা হয়েছে : http: //localhost/node/themes/template/image/icons/my-icon.png


"পথটি ভুল" - এটি খুব সহায়ক নয় :) এছাড়াও আপনার থিমের থিম ফাইলটিতে প্রিপ্রোসেসিং করা উচিত, বিশ্বব্যাপী tmeplate_preprocess_hook ফাংশনে নয় এবং আপনার drupal_get_path ('থিম', 'আপনার থিম') ব্যবহার করা উচিত।

@ user21641 drupal_get_pathD7 জন্য :) হল
Chapabu

1
এটি 8 টির জন্যও @ চাপাপু ...
ক্লাইভ

আচ্ছা একটা পালক দিয়ে আমাকে নামিয়ে দাও! রঙ আমাকে সংশোধন করুন :)
চাঁপাবু

এটি অবশ্যই ডি 8 এর জন্যও। আমি এটি পছন্দ করে ব্যবহার করেছি:$themePath = Url::fromUserInput('/' . drupal_get_path('theme', '[themename]')
ভোডে

উত্তর:


51

আপনি ব্যবহার করতে পারেন {{ base_path ~ directory }}যা নিখুঁত সমস্যা সংশোধন করবে, কোনও প্রিপ্রোসেসিংয়ের দরকার নেই, এই দুটি চলকই কোর দ্বারা অন্তর্ভুক্ত করা হয়েছে।

উদাহরণ স্বরূপ

<img src="{{ base_path ~ directory }}/images/logo.png" alt="My Logo" />

গীত। ~পল্লব মধ্যে সাহায্যকারী CONCATENATE হয়।

সম্পাদনা করুন: কমপক্ষে পৃষ্ঠায় * .html.twig টেম্পলেটগুলি বেস_পথ ভেরিয়েবল অন্তর্ভুক্ত করা হয়েছে, সম্ভবত অন্যান্য টেম্পলেটগুলির জন্য আপনাকে প্রিপ্রোসেসিং করতে হবে, আপনি {{ dump() }}ভেরিয়েবল উপস্থিত কিনা তা সহজেই পরীক্ষা করে দেখতে পারেন

// File: THEMENAME.theme in your theme's root directory
function THEMENAME_preprocess(&$variables, $hook)
{
    $variables['base_path'] = base_path();
}

3
আপনার সমাধান ভাগ করে নেওয়ার জন্য ধন্যবাদ। একটি তাত্ক্ষণিক মন্তব্য: আমাকে স্পষ্টভাবে $ ভেরিয়েবলগুলি যুক্ত করতে হয়েছিল ['বেস_পথ'] = বেস_পথ (); html.html.twig টেমপ্লেট ফাইলটিতে এটি উপলব্ধ করার জন্য আমার THEME_preprocess_html থিম হুককে দিন।
মার্কোস বুয়ার্ক

1
ব্যবহার সম্পর্কে সতর্ক থাকুন {{ directory }}একটি থিম মধ্যে পল্লব পরিবর্তনশীল যে আপনি একটি বেস থিমে ব্যবহার করতে এবং জন্য উপ-থিম তৈরি করতে মনস্থ: drupal.stackexchange.com/questions/277278
JamesWilson

1
পল্লব টেমপ্লেট পরামর্শ মডিউল প্রদান করে {{ base_bath }}যে টেমপ্লেটে; অন্যথায় কিছু টেমপ্লেটগুলির জন্য আপনাকে উপরের মন্তব্যে মার্কোস বুয়ার্কের মতো কাজটি করতে হবে, বা মাতোয়েল ড্রুপাল.স্ট্যাকেক্সেঞ্জিং
mlncn

9

ডিফল্টরূপে একটি {{ directory }}ভেরিয়েবল রয়েছে যা আপনি আপনার থিম ডিরেক্টরিতে সেই পয়েন্টগুলি ব্যবহার করতে পারেন। সমস্যাটি হ'ল এটি যেমন নিখুঁত নয়, ঠিক তেমনি আপনি যুক্ত করেছেন। আমি মনে করি এটি মূলত একটি ত্রুটিপূর্ণ কারণ এটির মূল পথটি অন্তর্ভুক্ত করা উচিত, তবে এটি পরিবর্তনের ফলে অবশ্যই এটি বিদ্যমান সাইটগুলি ভেঙে ফেলবে।

সুতরাং আপনার সামনে এটি যুক্ত করতে হবে; একটি দ্রোপাল একটি সাবফোল্ডারে ইনস্টল করা থাকলে এটি ভঙ্গ হবে। আপনি হয় নিজের টেম্পলেটটিতে হার্ডকোড করতে পারেন বা base_path()কাস্টম ভেরিয়েবলটিতে x.x তে ব্যবহারের মতো ব্যবহার করতে পারেন।


ছবিটি কীভাবে ব্যবহার করবেন /sites/default/files/MyFolder? মাইফোর্ডারে আমার একটি চিত্র MyImage.jpg আছে। এখন, টুইগ টেমপ্লেটে আমি যদি <img src={{ url }} alt={{ text }}>লিখি এখানে url ভেরিয়েবলের /MyFolder/MyImage.jpg এর পথ রয়েছে তবে এটি কাজ করছে না।
জাসোদীপ চ্যাটার্জী

2
যেমন বার্ডির লিখেছেন: <img src="/{{ directory }}/path/to/image"/>একটি চূড়ান্ত পথ পেতে সহজেই ব্যবহার করতে পারেন।
ড্যানিয়েলস

7
<img src="/{{ directory }}/images/logo.png"/> 

আমার জন্য কাজ যখন

<img src="{{ base_path ~ directory }}/images/logo.png" alt="My Logo" />

না

বিষয়বস্তু টেম্পলেট জন্য, আমি। মডুলেল ব্যবহার করতে হবে

   function hook_preprocess(&$variables, $hook) {

  $module_handler = Drupal::service('module_handler');
  $path = $module_handler->getModule('myModuleName')->getPath();

  if(isset($variables['region']) && $variables['region'] == 'content'){
    $variables['module_path'] = $path;
    $variables['http_host'] = $_SERVER['HTTP_HOST'];

এবং

  <img src="{{ module_path }}/images/error404.png" />
  <img src="//{{ http_host }}/{{ module_path }}/images/error403.png" />

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