it-swarm-tr.com

eklenti koduyla büyük HTML çıktısı ile ilgilenmek

Kısa bir süre önce, özel bir jquery resim galerisini yayınlara gömmek için bir kısa kod ekleyen ilk WP eklentisini yazdım. Öncelikle, yalnızca başlatma için gerekli olan javascript ile birlikte yazıya iyi bir HTML yığını atar.

Ancak, HTML çıktısını prosedürel olarak PHP'de bir dize olarak oluşturmak zorunda kaldım. Bu tür bir etiket çorbası beni her zaman deli ediyor, ve HTML oluşturmak için yardımcı işlevler ve kısmi şablonlar gibi şeyler sağlayan MVC çerçeveleriyle çalışmaya alışkınım.

Büyük miktarda dinamik olarak oluşturulmuş HTML veya JS'yi yönetmesi gereken eklenti yazarları için genel yaklaşım nedir?

9
Bryan M.

@ Bay M. Ben sık sık kullandığım diğer WordPress geliştiricilerini göremiyorum, bu beni şaşırtıyor ama onları çok seviyorum.

1.) Heredocs

Büyük metin bloklarını heredocs string olarak saklayabilir, böylece tek ve çift tırnakların karıştırılması için endişelenmeyi saklayabilirim:

   $html=<<<HTML
<input type="{$type}" size="{$size}" id="{$id}" class="{$class}" value="{$value}" />
HTML;

Değişkenlerin bir işleve bir dizi olarak iletilebileceğini ve ardından extract()ed öğesinin olabileceğini veya başka yollarla atayabileceğinizi unutmayın. Ayrıca parantezleri kullanmayacağımı da unutmayın çünkü her zaman zorunludurlar ancak kodun okunmasını kolaylaştırırlar. (Elbette the_content() gibi işlevlerin get_the_content()'dan maddi olarak farklı olması __ WordPress her zaman bu kodlama tarzını kolaylaştırmaz.)

Dahası, sizinle alakalı olmasa da, HTML, SQL vb. Gibi heredoc adlarını kullanırsam IDE PhpStorm sözdizimi enjeksiyonunu yapar ve içinde otomatik tamamlama ve sözdizimi renklendirmesini sağlar. Heredoc.

2.) Dizi Kullanarak Dize Birleştirme

Kullanmayı sevdiğim diğer deyim, içeriği bir diziye toplamak ve ardından diziyi implode(). Bunu hiç bir zaman kıyaslamamıştım, bu yüzden tekrar tekrar dizge birleştirmenin dizeler büyüdükçe katil olduğunu bildiğimden daha az yardımcı olabileceğimi biliyorum (eğer biri bu yaklaşımın neden daha iyi olmadığını bilirse veya daha iyi bir yaklaşım biliyorsanız geri bildirim duymak isterdim):

function my_get_form_and_fields($input_items) {
    $html = array();
    $html[] = '<form name="my_form" method="get">';
    foreach($input_items as $input_item) {
        extract($input_item);
        $html=<<<HTML
<input type="{$type}" size="{$size}" id="{$id}" class="{$class}" value="{$value}" />
HTML;
    $html[] = '</form>';
    return implode("\n",$html);         
}   
12
MikeSchinkel

PHP için bu işlevi kontrol edin:

http://php.net/manual/tr/function.ob-start.php

İçinde sadece html kodu bulunan bir dosyayı bir php değişkenine tamponlayabilirsiniz. Bu bakımı daha temiz hale getirecek.

Böylece böyle bir şeyle sonuçlanır:

ob_start();
   include('path/to/my/html/file.php');
   $includedhtml = ob_get_contents();
ob_end_clean();

Daha sonra sadece $ includehtml döndüğünüz yere dönebilirsiniz ve html içeriğinizin hepsini php dizelerinin içinde dışlamak zorunda kalmamasını sağlar.

5
Todd Perkins

Aslında bu çerçeveyi kullanmadım, ancak sunduğu şablon model muhtemelen çekici olacak. Yazarın bunu nasıl ayarladığına bir göz atmak isteyebilirsiniz.

https://github.com/Emerson/Sanity-Wordpress-Plugin-Framework

Templates ========= Mümkün olduğunda, PHP kodunu HTML'den ayırmalıyız. Wordpress'te, ikisinin de kaygısız bir şekilde karıştığını göreceksiniz. Bu genellikle işleri yapmanın "kolay bir yolu" olmakla birlikte, neredeyse hiçbir zaman "doğru yol" değildir. Bunun yerine, ikisini birbirinden ayırmalıyız, böylece mantığımızı ve düşüncelerimizi aptal tutmalıyız. Bunun için $ this-> render ('my-template') metodumuz var. Birkaç örnek:

    // From within a method in our controller
    $this->data['message'] = 'Pass this on to the template please';
    $this->render('my-template');

    // Meanwhile, in the /plugin/views/my-template.php file
    <h2>The Separation of Logic and Views</h2>
    <p><?php echo $this->data['message'];?></p>
4
marfarma

Bu HTML ve JS türüne bağlıdır.

JavaScript

Her şeyden önce, dinamik parçaları mümkün olduğunca statik parçalardan ayırın. Ardından, çalışma zamanında ihtiyacınız olan dinamik değişkenleri yükleyin ve statik komut dosyalarınızı üstbilgiye (veya altbilgiye, herneyse) sıralayın. Ancak bu şekilde, JS'nizin büyük çoğunluğu PHP'nizden ayrıdır.

HTML

Bu, kodunuzu PHP'de temiz bir şekilde oluşturmaktan ibarettir. Yeniden kullanacağınız çok büyük HTML parçalarınız varsa, bunları ayrı değişkenler olarak depolardım. Ardından, kısa kod çağrıldığında işleri birleştirmek için bu kadar basit:

echo $firstblock;
echo $shortcodecontent;
echo $lastblock;

Prosedürel olarak oluşturmaya çalışmak yerine, farklı HTML bloklarınızın tümünü içeren bir nesne (evet, PHP nesneleri destekler), daha sonra hangi blokları kullanacağınızı ve hangi verileri geri alacağınızı söyleyin. Bu size çok fazla zaman kazandırır.

2
EAMann