dinamik dinamik içerik sayfası içinde bir isim çapa etiketi eklemek

2 Cevap php

Ben 100 üzerinde ürün listeleyen bir sayfa var ve dinamik bir sonraki alfabesi ile başlayan öğelerin her yeni bölümün başında bir ad = "" etiketleri eklemeniz gerekir.

Örneğin:

<a name="a"></a>
<h1>Amazon River</h1>

<h1>Arrow Heads</h1>

<a name="b"></a>
<h1>Bear Claws</h1>

<h1>Bee Traps</h1>

<h1>Dodge Ball</h1>

<a name="f"></a>
<h1>Football Players</h1>

<h1>Fig Newtons</h1>

....

<a name="y"></a>
<h1>Yorktown</h1>

<h1>Yikes</h1>

<a name="z"></a>
<h1>Zebra</h1>

<h1>Zoo Mobile</h1>

Ben bu başarmak için ne alacağını bir emin, javascript / w biraz tanıdık, php / w sadece tanıdık değilim.

Ben teoride "kodunu" yazın dışarı, bu yüzden ben başarmak istiyorum ne bir fikir var

$letter = range(a-z);

if($title == first_letter_character($letter)) {
   print '<a name="'.$letter.'"></a>';
   $letter++; // goes to next letter in range
}

Ayrıca, bir öğe olmayabilir bazı harfler olabilir.

Herhangi bir yardım takdir edilmektedir.

2 Cevap

<a name="D"></a> belgeye semantik bir sürü katmıyor, bu yüzden JavaScript bunu başarmak için cazip olurdu ve temiz taban biçimlendirme tutmak - Bu zor bir karar. Ancak, ortaya çıkan işlevsellik yoursite.com/directory#D bu yüzden kötü bir seçenek gibi görünüyor etkinleştirmek için JS kullanarak JS olmadan çalışmalıdır. Sonunda, ben şüphe benim varsayılan PHP aracılığıyla biçimlendirme etiketleri dahil ediyorum.

Ben öğeleri dışarı baskı, böyle bir şey var varsaymak

<?php
$items = array(......); // populated via database?

foreach ($items as $item) {
  echo '<a href="<?= $item->url ?>"><?= htmlentities($item->name) ?></a>
}
?>

Ben aşağıdaki değişiklikleri yapacak

<?php
$items = array(......); // populated via database?

$last_letter = 0;

foreach ($items as $item) {
  $letter = strtoupper($item->name[0]); // capitalized first letter
  if ($letter != $last_letter) {
    // not the same letter as last item
    echo '<a name="', $letter, '"></a>'; // <a name="A"></a>
    $last_letter = $letter;
  }

  echo '<a href="', $item->url, '">', htmlentities($item->name), '</a>';
}
?>

Liste oluşturulan edilirken kesinlikle PHP çıktı böyle şeyler daha iyi. Bu yolu mevcut ve kullanılabilir istemci tarafı garantili. Javascript ekleme çalışacak, ama müşterinin bu özürlü var ise, bu geçici bir çözüm olamaz.

Yani burada (jquery benzer inşa edilecek) mootools kullanarak, JavaScript bunu yapabileceğini nasıl söyleniyor. H1 etiketi biz size yaparım üzerinde 'bir' ekleme yapmak zorunda sayfada sadece onlar varsayarsak:

var lastletter = null, firstletter, a;
$$('h1').each(function(el) {
    firstletter = el.get('text').substr(0,1).toUpperCase();
    if (firstletter != lastletter) {
        a = new Element('a', { 'name': firstletter }).inject(el, 'before');
    }
});

Pseudo-code: tüm h1 elemanları kapmak. sonuçları üzerinde döngü ve her h1 metin içeriğinin ilk harfi bir üst kasalı bir kopyasını ayıklayın. Bu mektup son harfi aynı değilse, o zaman, bir 'a' öğesi oluşturabilirsiniz adını parametresini ayarlayın ve hemen biz inceliyoruz h1 önce dom takın.