จัดการกับการส่งออก HTML ขนาดใหญ่ผ่านรหัสปลั๊กอิน


9

ฉันเพิ่งเขียนปลั๊กอิน WP แรกของฉันที่เพิ่มรหัสย่อสำหรับการฝังแกลเลอรี่ภาพ jquery ที่กำหนดเองลงในโพสต์ ส่วนใหญ่จะทิ้ง HTML ที่ดีไว้ในโพสต์พร้อมด้วยจาวาสคริปต์ที่จำเป็นสำหรับการเริ่มต้น

อย่างไรก็ตามฉันต้องสร้างผลลัพธ์ HTML ขั้นตอนเป็นสตริงใน PHP แท็กซุปชนิดนี้ทำให้ฉันถั่วเสมอและฉันคุ้นเคยกับการทำงานกับกรอบ MVC ที่ให้สิ่งต่าง ๆ เช่นฟังก์ชั่นผู้ช่วยและแม่แบบบางส่วนสำหรับการสร้าง HTML

วิธีการทั่วไปสำหรับผู้เขียนปลั๊กอินที่ต้องการจัดการ HTML หรือ JS ที่สร้างขึ้นแบบไดนามิกจำนวนมากคืออะไร?

คำตอบ:


12

@ Byran M. ฉันมักจะใช้สองโครงสร้างฉันไม่เห็นนักพัฒนา WordPress คนอื่นที่ใช้บ่อยซึ่งทำให้ฉันประหลาดใจ แต่ฉันชอบพวกเขามาก

1. ) Heredocs

คุณสามารถจัดเก็บบล็อกข้อความขนาดใหญ่เป็นสตริงheredocsที่อาจมีลักษณะเช่นนี้ดังนั้นฉันสามารถเก็บความกังวลเกี่ยวกับการผสมคำพูดเดี่ยวและคู่:

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

โปรดทราบว่าตัวแปรอาจถูกส่งผ่านไปยังฟังก์ชั่นเป็นอาร์เรย์และจากนั้นextract()ed หรือคุณสามารถกำหนดตัวแปรเหล่านี้ในรูปแบบอื่น นอกจากนี้โปรดทราบว่าฉันใช้วงเล็บปีกกาไม่ได้เพราะพวกเขาจำเป็นต้องใช้เสมอ แต่พวกเขาทำให้รหัสอ่านง่ายขึ้น (แน่นอนว่าด้วยฟังก์ชั่นthe_content()ที่แตกต่างจากget_the_content()WordPress ไม่ได้ทำให้การเข้ารหัสในรูปแบบนี้เป็นเรื่องง่ายเสมอไป)

มีอะไรเพิ่มเติมถึงแม้ว่ามันอาจจะไม่เกี่ยวข้องกับคุณถ้าฉันใช้ชื่อ heredoc เช่น HTML, SQL ฯลฯ จากนั้น IDE PhpStormของฉันจะทำการฉีดไวยากรณ์และจะให้การเติมสีอัตโนมัติและไวยากรณ์แก่ฉันใน heredoc

2. ) การต่อข้อมูลสตริงโดยใช้อาเรย์

สำนวนอื่น ๆ ที่ฉันต้องการใช้คือการรวบรวมเนื้อหาลงในอาร์เรย์แล้วimplode()อาร์เรย์ แม้ว่าฉันจะไม่เคยทำเบนช์มาร์กนี้ดังนั้นมันจะมีประโยชน์น้อยกว่าที่ฉันคิดเอาเองฉันรู้ว่าการต่อสตริงซ้ำซ้ำเป็นฆาตกรเมื่อสตริงมีขนาดใหญ่ขึ้น (ถ้าใครรู้ว่าทำไมวิธีนี้ไม่ดีขึ้นหรือถ้าคุณรู้จัก ชอบที่จะได้ยินผลตอบรับ):

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);         
}   

1
+1 สำหรับ Heredocs พวกมันยอดเยี่ยมโดยเฉพาะในสถานการณ์นี้
ไม่มีใคร

ยังไม่มีเวลาประเมินผลนี้ แต่ดูเหมือนว่าวิธีที่ตรงไปตรงมาที่สุดให้สิ่งที่ฉันต้องการ
ไบรอันเอ็ม

+1 สำหรับการต่อข้อมูลอาเรย์ / สตริง ฉันทำอย่างนั้นมาก มันทำให้การสร้างสตริงง่ายขึ้นโดยไม่ขึ้นบรรทัดใหม่และเว้นวรรค
s_ha_dum

5

ชำระเงินฟังก์ชั่นนี้สำหรับ PHP:

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

คุณสามารถบัฟเฟอร์ไฟล์ที่รวมซึ่งจะมีรหัส html ในนั้นเป็นตัวแปร php สิ่งนี้จะทำให้ทำความสะอาดได้ง่ายขึ้น

ดังนั้นคุณจะได้อะไรเช่นนี้:

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

จากนั้นคุณสามารถกลับมาที่ $ includehtml ที่คุณต้องการและมันทำให้เนื้อหา html ของคุณแยกจากกันโดยไม่ต้องสะท้อนออกมาทั้งหมดภายในสตริง php


4

ฉันไม่ได้ใช้เฟรมเวิร์กนี้จริง แต่โมเดลเทมเพลตที่ข้อเสนอนั้นน่าจะดึงดูด คุณอาจต้องการดูว่าผู้แต่งตั้งค่าอย่างไร

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

เทมเพลต ========= เมื่อใดก็ตามที่เป็นไปได้เราควรแยก PHP ออกจาก HTML ภายใน Wordpress คุณจะเห็นทั้งสองอย่างรวมกันโดยไม่เข้าใจ ในขณะนี้มักจะเป็น "วิธีที่ง่าย" ในการทำสิ่งต่าง ๆ มันแทบจะไม่เคย "ถูกวิธี" แต่เราควรแยกทั้งสองออกจากกันดังนั้นให้ตรรกะของเราบริสุทธิ์และมุมมองของเราเป็นใบ้ เพื่อจุดประสงค์นี้เรามีวิธี $ this-> render ('แม่แบบของฉัน') ตัวอย่างบางส่วน:

    // 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>

มันแค่ใช้การบัฟเฟอร์ผลลัพธ์เช่น Todd Perkins อธิบายในคำตอบของเขา
Ian Dunn

2

ขึ้นอยู่กับประเภทของ HTML และ JS

JavaScript

ก่อนอื่นให้แยกส่วนไดนามิกออกจากชิ้นส่วนคงที่มากที่สุด จากนั้นโหลดตัวแปรแบบไดนามิกใด ๆ ที่คุณต้องการในขณะทำงานและจัดคิวสคริปต์แบบคงที่ในส่วนหัว (หรือส่วนท้าย, อะไรก็ตาม) แต่ด้วยวิธีนี้ส่วนใหญ่ของ JS ของคุณแยกจาก PHP ของคุณ

HTML

นี่เป็นเรื่องของการสร้างรหัสของคุณอย่างสมบูรณ์ใน PHP หากคุณมี HTML จำนวนมากที่คุณจะนำกลับมาใช้ใหม่ฉันจะเก็บสิ่งเหล่านั้นเป็นตัวแปรแยกต่างหาก จากนั้นทำการปะติดปะต่อสิ่งต่าง ๆ เมื่อรหัสย่อเรียกง่ายเหมือน:

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

แทนที่จะพยายามสร้างมันขึ้นมาตามขั้นตอนให้สร้างวัตถุ (ใช่แล้ว PHP รองรับวัตถุ) ที่มีบล็อก HTML ที่แตกต่างกันทั้งหมดของคุณจากนั้นสั่งให้บล็อกที่จะใช้และข้อมูลที่จะส่งกลับ สิ่งนี้จะช่วยให้คุณประหยัดเวลาได้มาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.