আমি কীভাবে একটি ডিভিতে দুটি রেন্ডার অ্যারে উপাদানগুলিকে গুটিয়ে রাখতে পারি?


12

এই উপস্থাপনযোগ্য অ্যারে দেওয়া:

$output = array(
    'twitter-icon' => array(
      '#type' => 'markup',
      '#markup' => '<div class="twitter-icon"></div>'
    ),
    'twitter-link' => array(
      '#type' => 'markup',
      '#markup' => l('follow us on Twitter', 'https://twitter.com/#!/zujava'),
    ), 
  );

আমি কীভাবে এই দুটি উপাদানকে একটি একক ডিআইভিতে আবদ্ধ করব?

উত্তর:


29

আপনি #containerফর্ম উপাদানটি এবং নিম্নলিখিতগুলির মতো কোডটিও ব্যবহার করতে পারেন :

$wrapper = array(
  '#type' => 'container',
  '#attributes' => array(
    'class' => array('class-name'),
  ),
);

$wrapper['twitter-icon'] => array(
  '#type' => 'markup',
  '#markup' => '<div class="twitter-icon"></div>'
);

$wrapper['twitter-link'] => array(
  '#type' => 'markup',
  '#markup' => l(t('follow us on Twitter'), 'https://twitter.com/#!/zujava'),
); 

#Container উপাদান একটি সঙ্গে তার শিশু উপাদান গোপন <div>ট্যাগ, যার সিএসএস ক্লাসে পাশ অন্যতম #attributesসম্পত্তি।

এমনকি আপনি "টুইটার-আইকন" উপাদানটির জন্য একটি ধারকও ব্যবহার করতে পারেন তবে নীচের কোডের মতো আপনি সম্ভবত এটিতে কোনও উপাদান যুক্ত করতে পারছেন এমনটি বাদ দিলে আপনি কোনও প্রসেস দিতে পারবেন না:

$wrapper = array(
  '#type' => 'container',
  '#attributes' => array(
    'class' => array('class-name'),
  ),
);

$wrapper['twitter-icon'] => array(
  '#type' => 'container',
  '#attributes' => array(
    'class' => array('twitter-icon'),
  ),
);

if ($condition) {
  $wrapper['twitter-icon']['twitter-icon-text'] => array(
    '#type' => 'markup',
    '#markup' => t('Icon text'),
  );
}

$wrapper['twitter-link'] => array(
  '#type' => 'markup',
  '#markup' => l(t('follow us on Twitter'), 'https://twitter.com/#!/zujava'),
); 

আমার কাছে এটি সর্বোত্তম উত্তর, যেহেতু এটি দৈহিক অ্যারে কাঠামোটি যা আবৃত রয়েছে তার প্রতিনিধিত্ব করতে ব্যবহার করে, আরও অনুলিপি করে পেস্ট করবে (@ninjascorner উত্তরে একটি উপাদান সরিয়ে ফেললে / ডিআইভিগুলি বন্ধ হয়ে যেতে পারে), এবং অতিরিক্ত প্রয়োজন হয় না থিম ফাংশন। ধন্যবাদ!
জাস্টিন

এটি সঠিক: আপনি #suffixশেষ উপাদান #prefixথেকে সম্পত্তি বা প্রথম উপাদান থেকে সম্পত্তিটিকে নতুন যুক্ত উপাদানে না নিয়ে একই পাত্রে রেন্ডার করা অন্য উপাদান যুক্ত করতে পারেন । যেমনটি আপনি বলেছেন, এটি ত্রুটি-প্রবণতা কম।
kiamlaluno

6

এই কি আপনি খুঁজছেন?

$output = array(
    'twitter-icon' => array(
      '#type' => 'markup',
      '#markup' => '<div class="twitter-icon"></div>'
      '#prefix' => '<div class="test">',
    ),
    'twitter-link' => array(
      '#type' => 'markup',
      '#markup' => l('follow us on Twitter', 'https://twitter.com/#!/fdgf'),
      '#suffix' => '</div>',
    ), 
);

আশা করি এইটি কাজ করবে!


@ নিনজা +1ed, দুর্দান্ত উত্তর আমি এই বৈশিষ্ট্যগুলি ভুলে গিয়েছিলাম। দয়া করে আমার উত্তরটি পড়ুন, এটি আপনার প্রত্যয় এবং উপসর্গের বিকল্প ভিত্তিক বিকল্পের মাধ্যমে অর্জন করা যেতে পারে।
স্টেফগোসেলিন

@ স্টেফগোসেলিন, আপনি কি বোঝাতে চাইছেন যে আপনি থিম তৈরি করতে একটি টিপিএল ফাইল তৈরি করতে চান?
নিনজাকর্নার

এই উত্তরের জন্য ধন্যবাদ। আমি জানতাম কীভাবে এটি একটি উপাদানটিতে করা যায় তবে এটি আমার কাছে প্রত্যয় এবং উপসর্গটি বিভক্ত হয় নি। মজাদার. এটি আমার কাছে অগোছালো মনে হচ্ছে, তবে কেন আমি সত্যিই কোনও সমস্যা করতে পারি না তা আমি স্পষ্ট করে বলতে পারি না।
জাস্টিন

@ninjascorner বিলম্বের জন্য দুঃখিত, আমি এই বিষয়ে আমার কাছে থাকা নোটটি খুঁজে পেলাম না। আমি অন্য উত্তর, থিম বা মডিউলে ব্যবহারযোগ্য থিম হুক ব্যবহার করছে চেয়ে একটি উপায় সম্ভব কম মার্জিত মনে এছাড়াও রয়েছে theme_render_example_add_div দেখুন api.drupal.org/api/examples/... )
stefgosselin

এটি কেবলমাত্র তখনই ভাল যদি আপনি নিশ্চিত হন যে উভয় উপাদানই সর্বদা রেন্ডার হয়ে যায়। এটির বিভাজন যখন অবিচ্ছিন্ন <ডিভি> সাথে শেষ করা সহজ।
কুফাইকো

2

আপনি এটির জন্য একটি থিমও তৈরি করতে পারেন।

$form['twitter']['#theme'] = 'my_twitter_theme';

$form['twitter']['icon'] = array(
'twitter-icon' => array(
  '#type' => 'markup',
  '#markup' => '<div class="twitter-icon"></div>'
);

$form['twitter']['link'] = array(
  '#type' => 'markup',
  '#markup' => l('follow us on Twitter', 'https://twitter.com/#!/zujava'),
);

এবং আপনার থিম হুক:

function my_hook_theme(){
  return array(
    'my_twitter_theme' => array('form' => NULL)
  );
} 

এবং থিম ফাংশনে:

function theme_my_twitter_theme($form){
  $output = "";

  $output .= "<div class=\"twitter\">";
  $output .= drupal_render($form['icon']);
  $output .= drupal_render($form['link']);
  $output .= "</div>";    

  $output .= drupal_render($form);
  return $output;
}

আমি এটি ড্রুপাল 6 এ ব্যবহার করি, আমি D7 তেও কাজ করে কিনা তা নিশ্চিত নই তবে আমি আশা করি


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