MVC Dünyada HTML Indentation [yinelenen]

5 Cevap php

Bu soru burada zaten bir cevabı var:

5 Cevap

Belirtildiği gibi kaynak kodu girinti ve çıkış girinti arasında bir fark yoktur. Çıkış dinamik olarak oluşturulur, çünkü kaynak kodu girinti, çıkışın girinti farklı olabilir. Şablonları yazarken, kaynak kodun okunabilirliği en önemlisidir. Önce bu odaklanmak gerekir! Genellikle çıkış HTML girinti olmayan bir konudur.

İki pratik yaklaşımlar çıktınıza girinti uyumsuzluğu kurtulmak için, söyledikten sonra:

Use a templating language that can properly indent the output

Ilk örneklerinden biri Ruby için Haml, bir çiftleşmiş dildir. Böyle bir şablon alır:

%body
  %h1 I am a Level 1 Header
  %table
    %tr
      %td
        %h1 I am a Level 1 Header Inside a Table

Çıktı düzgünce örneğe benzer HTML, hepsi düzgün girintili biçimlendirilir.

Bu yaklaşımın bir belirgin dezavantajı gerçekten şablonları HTML yazmıyorsunuz ki, HTML gibi semantik farklı bir dilde yazıyorsanız. Bu görüşlerini koruyacak kim bağlı olarak, bir sorun olabilir.

Strip all superfluous whitespace from the output, don't indent at all

Bazı şablon dilleri tüm gereksiz boşluk kaldırmak için seçeneğiniz vardır. PHP için Smarty bir whitespace trimming plugin ki, örneğin, güzel bu işi yapar vardır. Bu tamamen bilerek tüm çıkış eşit olmayan girintili yaparak çıktı güzelleştirme soruna çalışır. Ayrıca bant genişliği çok marjinal bir miktarda tasarruf sağlar.

Bir PHP-tek çözüm $output_callback işleyicisi ile ob_start() kullanmak olacaktır (hangi documented here). Sen Smarty eklentisi benzer aşırı boşluk, şeritler basit bir geri arama yazabilirsiniz. Çıkış geri arama Tidy kullanarak aksine, bu hala uzun / yavaş sayfaları hızlandırmak için sayfanın sonuna kadar tampon temizlemek için izin verir.

I HTML ve Source Code Indentasyonu arasında bir fark olduğunu söyleyebilirim. Tipik bir MVC View ben okunabilir bir şekilde girintili gerektiğini düşünüyorum kaynak kodu kullanabilirsiniz.

Gerçek HTML çıktısı olsa farklı bir şeydir. Tabii chaoticly girintili kaynak (bu bazen sadece bazı HTML işleme sonrası söylediğim gibi genellikle içerdiğini ama herhangi bir girinti kaldırmak eğilimindedir neden olan), ancak profesyonelce görünüyor tür Tarayıcı kendisi için değilse hiç önemli ve eğer yok Ben gerçekten güzel bir şekilde biçimlendirilmiş şekilde tüm DOM öğelerini gösteren birformatlayıcı veya kundakçı kullanacak kaynağını görmek gerekir.

Üçüncü bir cevap eklemek için özür dilerim! Bir süre bir oldu, ve ben yerine bir cevap eklemek istiyorum, bunun için beni aşağı oy etmeyiniz. Ben sadece bu burada dedi gerektiğini düşünüyorum:

Bu aka girinti 2 farklı "konuları", PHP için bir ve HTML için bir sahip, iş gibi görünüyor:

<table>
<?foreach($list->sections as $sKey => $section) { ?>
    <tr><td><h4><?= $section->label ?></h4></td></tr>
<?  foreach($section->items as $iKey =>  $item) { ?>
    <tr><td><?= $item->label ?></td></tr>
<?  } ?>
<?} ?>
</table>

Her php etiketi satırın başındaki başlangıç ​​ve php blok kodu içinde girinti sahip olarak, çıkan kodu temiz kalır:

<table>
    <tr><td><h4>Books 1</h4></td></tr>
    <tr><td>Some Book</td></tr>
    <tr><td>Some Other Book</td></tr>
    <tr><td><h4>Books 2</h4></td></tr>
    <tr><td>Some Book in List 2</td></tr>
</table>

Ve PHP ve HTML indentantion mantığı bu kendi her olsa, kaynak dosyada tutulur.

Ben bir şey girintilenmiş izlemek için buraya icat edilebilir düşünüyorum.

Ben aynı zamanda düzgün girintili PHP ve düzgün girintili HTML var, inanıyorum, ama kod (daha az zarif ve verimli) bir PHP uzantısı veya bir kütüphane olarak da, bu işlemek için yazılması gereken, mümkün.

My first guess would be for PHP to keep track of the indentation of the HTML, and when a new line is printed, resume at the previous level of indentation, sort of what most IDE's do when you type enter. The PHP programmer can be given control over this with the functions like these (I'm just making this stuff up right now):

  • Sekme ($ n): ($ n sekmeler ekleyebilir) sağa girinti düzeyi $ n sekmeleri taşımak
  • detab ($ n): girinti seviyesinden kaldırmak $ n sekmeleri
  • () dur: girinti durdurur. no sekmeleri çıkış eklenecektir. Bu HTML etiketleri ÖN için yararlıdır.
  • özgeçmiş (): Bir durak sonra önceki seviyesinde özgeçmiş girinti ().

Ne bazen yaptığım bazı HTML temel girinti için çift tırnak içindeki kullanımı \ t. Bana hata ayıklama şeyler olur. Ayrıca, ben foreach döngüleri ile benim şablonları riddling anlamına gelse bile, mümkün olduğunca HTML içine şablonları tutun. (MVC "görünüm" olarak bilinir) şablonda, PHP kodu girinti genellikle HTML kodunu izler.

Ben de onlara "girinti farkında" örnek olmak için, HTML üretmek işlevlerine bir argüman ekleyebilirsiniz:

buildSomeHtmlList($data, $indent=0)

İşte mostly girintili HTML içine sonuçları ve bu bana uygun.

BTW, sizin örnekte, bu PHP çıktı "