L () के साथ EMPTY एंकर-केवल लिंक कैसे बनाएं?


20

मैं ajax- कॉलिंग उद्देश्यों के लिए l()कुछ पाने के लिए उपयोग करने की कोशिश कर रहा हूं <a href='#' ...>/programming/1698453/drupal-creating-anchor-only-link-with-l सही काम के बहुत करीब है - l()जैसे 'fragment' => 'foo'लिंक बनाने के लिए ऑप्शन में एक विकल्प का उपयोग करें <a href='#foo'...>- लेकिन मैं हूँ एक साफ '#' पाने की कोशिश कर रहा है। क्या ऐसा करने का कोई तरीका है, या मुझे सिर्फ टुकड़े के हिस्से में कुछ डालना चाहिए और इसके बारे में चिंता नहीं करनी चाहिए?

जवाबों:


12

यदि आप टुकड़े टुकड़े के साथ साफ "#" का उपयोग नहीं कर सकते हैं, तो मैं आपको उपयोग करने का सुझाव दूंगा <a href="javascript:">link</a>
जब "javascript:" या "javascript: void (0)" को जोड़ने के लिए href, <a>टैग कुछ नहीं करेगा। फिर आप अपने अजाक्स उद्देश्य के लिए लिंक पर "ओनलीक" बाँध सकते हैं।
आप इसे l()नीचे दिए गए फ़ंक्शन का उपयोग करके कार्यान्वित कर सकते हैं:

     l('link', 'javascript:',  array('external' => TRUE));

किस बारे मेंjavascript:void(0)
सर्जस

1
@ सेराजस, javascript:और javascript:void(0)समान हैं। एकमात्र अंतर "शून्य (0)" :)
सिथु

I mean l () Convert () होगा?
सेरजस

6
आप कभी भी इस तरह के shenanigans का उपयोग नहीं करना चाहिए और सिर्फ घटना संचालित जावास्क्रिप्ट का उपयोग करें! यह 2012 नहीं 2004 है। इतना कम गुणवत्ता वाला उत्तर मतदान क्यों है? लोकप्रिय है क्योंकि यह आसान है? लेकिन यह बेहद गलत है। :(

@chx, जैसा कि आप एक ड्रूपल कोर मेंटेनर हैं, मुझे उम्मीद है कि आप पथ या टुकड़े के बजाय एल () फ़ंक्शन के दूसरे पैरामीटर का उपयोग नहीं करने के लिए गाली नहीं दे रहे हैं। दुर्भाग्य से, फ़ंक्शन "जावास्क्रिप्ट" को एक मार्ग के रूप में स्वीकार करता है :) यदि यह बहुत गलत है, तो द्रुपाल इसे क्यों स्वीकार करता है। संभवतः, यह बाद के Drupal संस्करणों में प्रतिबंधित होगा।
सिथू

15

PHP टाइपिंग पॉप प्रश्नोत्तरी समय! (पूर्ण प्रकटीकरण: मैं हमारे कार्यालय में नहीं जीता)।

जैसा कि पहले ही बताया जा चुका है, यह वह कोड है l()जिसमें हम संबंधित हैं:

if (isset($options['fragment']) && $options['fragment'] !== '') {
  $options['fragment'] = '#' . $options['fragment'];
}

तो यहाँ सवाल है: क्या मूल्य एक खाली स्ट्रिंग के लिए जाती है लेकिन निम्नलिखित गुजरता है?

(isset($var) && $var !== '')

उत्तर है: FALSE :!

तो, हम यह कोशिश कर सकते हैं:

l(t('My link'), NULL, array('fragment' => FALSE));

जो हमें देता है:

<a href="/#">My link</a>

शुक्र है कि हम उस प्रमुख स्लैश को छीन सकते हैं जो साथ में गुजर रहा है external => TRUE:

l(t('My link'), NULL, array('external' => TRUE, 'fragment' => FALSE));

जो हमें देता है:

<a href="#">My link</a>

बूम। चीजों को हम HTML स्ट्रिंग को मैन्युअल रूप से, ईएच से बचने से बचने के लिए करते हैं?

परिशिष्ट भाग:

मुझे यकीन नहीं है कि मैं वास्तव में सामान्य परिस्थितियों में php से इस तरह के लिंक को प्रिंट करने की सलाह दूंगा। आपकी जावास्क्रिप्ट के बिना, वह सब लिंक यह करने जा रहा है कि वह आपके उपयोगकर्ता को पृष्ठ के शीर्ष पर ले जाए ( जो कि मेरे थोड़े से आश्चर्य से, विशिष्ट व्यवहार है) )। यह शायद कहीं इशारा करना चाहिए जो जावास्क्रिप्ट के बिना काम करता है।

यदि लिंक वास्तव में केवल जावास्क्रिप्ट के साथ समझ में आता है (जैसे एक js- केवल स्लाइड शो या कुछ के लिए नियंत्रण), तो मुझे लगता है कि जावास्क्रिप्ट के साथ पृष्ठ पर लिंक जोड़ना बेहतर है। वैकल्पिक रूप से, यदि आप वास्तव में इसे अपने स्रोत में रखना चाहते हैं, तो सुनिश्चित करें कि यह display:noneडिफ़ॉल्ट रूप से है। Drupal के पास .jshtml के लिए क्लास है, फिर इसे तब दिखाया जाता है जब जावास्क्रिप्ट चारों ओर होता है।


7

दुर्भाग्यवश url()फ़ंक्शन (जो l()आंतरिक रूप से कहता है) बहुत कम nukes खाली लाइनों के किसी भी अवसर के साथ nukes:

if (isset($options['fragment']) && $options['fragment'] !== '') {
  $options['fragment'] = '#' . $options['fragment'];
}

यह सुनिश्चित करने के लिए जांच करता है कि टुकड़ा एक खाली स्ट्रिंग नहीं है, जिसे साफ करने के लिए आपको पास करना होगा # । मुझे लगता है कि सबसे आसान समाधान पृष्ठ में कहीं एक उपयुक्त तत्व की आईडी चुनना होगा और इसके बजाय टुकड़े के लिए उपयोग करना होगा (याjavascript:void जैसा कि सिथू ने उल्लेख किया है)।

हालांकि ... सबसे सुलभ तरीका (और बाद में, कई देशों में, कानूनी तरीके; राज्यों में धारा 508 पर विचार करें) डीडीए यूके में , आदि) आपके लिंक द्वारा लोड / समायोजित की जा रही सामग्री प्रदान करना होगा एक अलग पेज, और लिंक के href के रूप में उस पेज के लिए URL का उपयोग करें। फिर आप उन ब्राउज़रों के लिए पृष्ठ को पुनर्निर्देशित करने से लिंक पर घटना को रोकने के लिए जावास्क्रिप्ट का उपयोग करेंगे, जिन्होंने इसे सक्षम किया है।

इस तरह आपके पास जावास्क्रिप्ट के बिना उपयोगकर्ताओं के लिए कमबैक सामग्री है, आप कानूनी बने रहते हैं, और आप सभी और उनके कुत्ते को खुश रखते हैं :)


महान पतन के बारे में संपादित करें! यदि हम लिंक के href में ajax URL का उपयोग करते हैं, तो क्या जावास्क्रिप्ट अक्षम होने पर कॉलिंग पेज एक रेंडरेबल HTML हो सकता है? मैंने कभी भी print drupal_json_output($output)अपने अजाक्स कॉलिंग पेज में।
सिथू

4

आप साफ उपयोग नहीं कर सकते #

लेकिन इसके space symbolबाद जोड़ना संभव है #:

  l('Link title', '# ', array('external' => TRUE));

2

मेरे पास बस एक ही मुद्दा था, लेकिन कोई भी समाधान संतोषजनक नहीं था, इसलिए मैं अपने स्वयं के साथ आया:

l('link', '', array('fragment' => ' ', 'html' => TRUE, 'external' => TRUE));

यह एक साफ उत्पादन करता है #

<a href="#">link</a>

बंद, यह <a href="# ">link</a>मेरे लिए पैदा करता है।
tyler.frankenstein

1

मैं बदले में html_tag रेंडर टाइप का उपयोग करूंगा क्योंकि मेरा मानना ​​है कि रेंडर लिंक ड्रुपल से विशेष ध्यान प्राप्त करता है। नकारात्मक पक्ष यह है कि इसके लिए कोई शॉर्ट-कट फ़ंक्शन नहीं है, इसलिए हमें रेंडर सरणी का उपयोग करना होगा:

array (
  '#type' => 'html_tag',
  '#tag' => 'a',
  '#attributes' => array (
    'href' => '#',
  ),
);

0

यह मूल रूप से एक ही उत्तर है जिसे मैंने यहां पोस्ट किया है ... fragmentएक ही स्थान पर सेट करना एक में बदल जाएगा #, और $current_pathइसमें शामिल है क्योंकि अन्यथा लिंक केवल www.example.com/#इसके बजाय सेट किया जाएगा www.example.com/current-page#:

$current_path = check_url(drupal_get_path_alias($_GET['q']));
$link = l('link', $current_path, array('fragment' => ' '));

पथ उर्फ ​​प्राप्त करने की कोई आवश्यकता नहीं है क्योंकि l () आपके लिए उर्फ ​​में परिवर्तित हो जाएगा। गैर-अलियास पथ का उपयोग करना वास्तव में बेहतर है।
रॉबी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.