मैं एक div में दो रेंडर ऐरे तत्वों को कैसे लपेटता हूँ?


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'),
    ), 
  );

मैं इन दोनों तत्वों को एक ही DIV में कैसे लपेटूँ?

जवाबों:


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>टैग, जिसका CSS वर्ग में पारित एक है #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 उत्तर में एक तत्व को स्थानांतरित करना उद्घाटन / समापन DIVs को तोड़ सकता है), और अतिरिक्त की आवश्यकता नहीं है विषय कार्य। धन्यवाद!
जस्टिन

यह सही है: आप #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>',
    ), 
);

उम्मीद है की वो मदद करदे!


@nija + 1ed, महान जवाब मैं उन विशेषताओं को भूल गया था। कृपया मेरा उत्तर पढ़ें, क्या यह आपके प्रत्यय और उपसर्ग के आधार पर थीमिंग के माध्यम से प्राप्त किया जा सकता है।
स्टेफोसोसेलिन

@stefgosselin, इसका मतलब है कि आप इसे थीम के लिए एक tpl फ़ाइल बनाना चाहते हैं?
निन्जाकार्नर

इस उत्तर के लिए धन्यवाद। मुझे पता था कि एक तत्व पर यह कैसे करना है, लेकिन यह मुझे प्रत्यय और उपसर्ग को विभाजित करने के लिए नहीं हुआ। दिलचस्प। यह मुझे गन्दा लगता है, लेकिन मैं यह स्पष्ट नहीं कर सकता कि मैं वास्तव में मुद्दा क्यों नहीं बना सकता।
जस्टिन

@njjascorner देरी के लिए क्षमा करें, मुझे इस विषय पर नोट नहीं मिला। मैं अन्य उत्तर, विषय या मॉड्यूल में प्रयोग करने योग्य है कि विषय हुक उपयोग कर रहा है की तुलना में एक तरह से संभव कम सुरुचिपूर्ण लगता भी है theme_render_example_add_div देखें api.drupal.org/api/examples/... )
stefgosselin

यह केवल तभी अच्छा होता है जब आप सुनिश्चित हों कि दोनों तत्व हमेशा प्रदान किए जाएंगे। इस तरह से विभाजित होने पर अशुद्ध <div> के साथ समाप्त करना आसान है।
कुफेइको

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;
}

मैं Drupal 6 में इसका उपयोग करता हूं, मुझे यकीन नहीं है कि अगर D7 में भी काम करता है लेकिन मुझे आशा है कि


हां, मैंने इस विधि को पोस्ट करने के बाद पता लगाया (ठीक है, मैं उदाहरण मॉड्यूल की नकल करता हूं)। यह बहुत अच्छा काम करता है, लेकिन मैं इसे सबसे अच्छी विधि नहीं मानता, क्योंकि (अगर मैं सही तरीके से समझूं), तो आपको अपनी क्लास का नाम फंक्शन में रखना होगा, कम करना है।
जस्टिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.