L () ile sadece EMPTY sabit bağlantı nasıl oluşturulur?


20

Ben ajax arama amaçlı l()gibi bir şey almak için kullanmaya çalışıyorum <a href='#' ...>. /programming/1698453/drupal-creating-anchor-only-link-with-l doğru olana çok yakın - l()gibi 'fragment' => 'foo'bir bağlantı üretmek için bir seçenek kullanın <a href='#foo'...>- ama ben temiz bir # 'almaya çalışıyorum. Bunu yapmanın herhangi bir yolu var mı, yoksa sadece parçanın bir parçası olarak bir şey koymalı mıyım?

Yanıtlar:


12

Temiz "#" parçasını kullanamıyorsanız, kullanmanızı öneririm <a href="javascript:">link</a>. Özniteliğe
"javascript:" veya "javascript: void (0)" eklenirken etiket hiçbir şey yapmaz. Sonra ajax amacınız için bağlantıya "onclick" bağlayabilirsiniz. Bu işlevi aşağıdaki gibi kullanarak uygulayabilirsiniz:href<a>
l()

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

ne dersinjavascript:void(0)
Serjas

1
@Serjas javascript:ve javascript:void(0)aynı. Tek fark "boşluk (0)" :)
Sithu

Yani l () dönüştürecek ()?
Serjas

6
Asla bu tür maskaralık kullanmamalı ve sadece olay güdümlü JavaScript kullanmamalısınız! Bu, 2004 değil. Neden bu kadar düşük kaliteli bir cevap oylandı? Popüler çünkü kolay mı? Ama bu son derece yanlış. :(

@chx, bir drupal çekirdek koruyucusu olduğunuzu umuyorum, yol veya parça yerine l () işlevine ikinci parametreyi kullanmamanızı kötüye kullanmamanızı umuyorum. Ne yazık ki, fonksiyon "javascript" i bir yol olarak kabul eder :) Eğer son derece yanlışsa, Drupal bunu neden kabul eder. Muhtemelen, sonraki Drupal versiyonlarında kısıtlanacaktır.
Sithu

15

PHP daktilo pop pop sınav süresi! (Tam açıklama: Ofisimizde kazanmadım).

Daha önce de belirtildiği gibi, bu l()endişe duyduğumuz kod :

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

İşte soru şu: Boş bir dizeye hangi değer verilir, ancak aşağıdakiler geçer mi?

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

Cevap: FALSE!

Yani, bunu deneyebiliriz:

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

Hangi bize verir:

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

Neyse ki önde gelen eğik çizgiyi geçerek çıkarabiliriz external => TRUE:

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

Hangi bize verir:

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

Boom. Html dizelerini elle birleştirmekten kaçınmak için yaptığımız şeyler, ha?

dipnot:

Aslında normal koşullar altında php böyle bir bağlantı yazdırmak tavsiye ederim emin değilim. Javascript'iniz olmadan, tüm bu bağlantı yapacaktır ( bu, benim küçük bir sürpriz, belirtilen davranış olduğunu ) sayfanın üstüne kullanıcı atlamak . Muhtemelen javascript olmadan çalışan bir yere işaret etmelidir.

Bağlantı gerçekten sadece javascript ile mantıklıysa (sadece js slayt gösterisi veya başka bir şey için kontroller gibi), javascript ile sayfaya bağlantı eklemek daha iyi olduğunu düşünüyorum. Alternatif olarak, gerçekten kaynağınıza koymak istiyorsanız, display:nonevarsayılan olarak olduğundan emin olun . Drupal .jshtml üzerinde javascript civarında olduğunda göstermek için sınıfa sahiptir .


7

Maalesef url()( l()dahili olarak çağıran) fonksiyon , aşağıdaki satırlarla boş bir fragman şansını hemen hemen nükle:

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

Parçanın boş bir dize olmadığından emin olmak için kontrol eder, bu da temizliği elde etmek için geçmeniz gereken şeydir #. En kolay çözüm, sayfanın herhangi bir yerinde uygun bir elemanın kimliğini seçmek ve bunun yerine parça için (veya javascript:voidSithu'nun belirttiği gibi) kullanmak olacağını düşünüyorum .

Bununla birlikte ... en erişilebilir yol (ve daha sonra birçok ülkede, yasal yol; Devletlerde 508 , İngiltere'deki DDA vb . Düşünün ), bağlantınız tarafından yüklenen / ayarlanan içeriği sağlamak olacaktır. ayrı bir sayfa kullanın ve bu sayfanın URL'sini bağlantının href'i olarak kullanın. Daha sonra, bağlantıdaki etkinliğin sayfayı etkinleştiren tarayıcılar için sayfayı yeniden yönlendirmesini durdurmak için javascript'i kullanırsınız.

Bu şekilde, javascript içermeyen kullanıcılar için yedek içeriğiniz olur, yasal kalırsınız ve herkesi ve köpeklerini mutlu edersiniz :)


Fallback hakkında harika bir düzenleme! Bağlantının href'inde ajax URL'sini kullanırsak, javascript devre dışı bırakılırsa arama sayfası yenilenebilir bir HTML olabilir mi? print drupal_json_output($output)Ajax arama sayfamda hiç vardı .
Sithu

4

Temiz kullanamazsın #.

Ancak space symbolsonra eklemek mümkündür #:

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

2

Sadece aynı sorunu yaşadım, ancak çözümlerin hiçbiri tatmin edici değildi, bu yüzden kendi çözümümü buldum:

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

Bu temiz bir #

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

Yakın, bu <a href="# ">link</a>benim için üretiyor .
tyler.frankenstein

1

Ben render bağlantı html_tag kullanmak istiyorsunuz çünkü inanıyorum bağlantı Drupal özel ilgi almak render . Olumsuz tarafı bunun için kısayol işlevi yoktur, bu yüzden bir render dizisi kullanmamız gerekir:

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

0

Bu temelde burada gönderdiğim cevaptır ... fragmentTek bir boşluğa ayarlamak a'ya dönüşür #ve $current_pathdahil edilir, çünkü aksi takdirde bağlantı sadece www.example.com/#yerine ayarlanacaktır www.example.com/current-page#:

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

Yol takma adını almanıza gerek yoktur çünkü l () sizin için takma ada dönüşür. Gerçekte takma adı olmayan bir yol kullanılması tercih edilir.
rooby
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.