it-swarm-ko.tech

HTML 출력 매크로

나는 최근에 사용자 정의 jquery 이미지 갤러리를 게시물에 삽입하는 단축 코드를 추가하는 첫 번째 WP 플러그인을 작성했습니다. 주로 초기화에 필요한 javascript와 함께 좋은 HTML 덩어리를 게시물에 덤프합니다.

그러나 PHP에서 문자열로 절차 적으로 HTML 출력을 구현해야했습니다. 이런 종류의 태그 스프는 항상 나를 괴롭 히고 HTML 생성을위한 헬퍼 함수 및 부분 템플릿과 같은 것들을 제공하는 MVC 프레임 워크를 사용하는 데 익숙합니다.

다량의 동적으로 빌드 된 HTML 또는 JS를 관리해야하는 플러그인 작성자를위한 일반적인 접근법은 무엇입니까?

9
Bryan M.

@Byran M. 저는 자주 자주 사용하는 다른 WordPress 개발자를 보지 못하는 두 가지 구조를 사용하는 경향이 있습니다. 놀라는 부분은 많지만 마음에 들었습니다.

1.) Heredocs

큰 텍스트 블록을 heredocs string처럼 저장할 수 있습니다. 이렇게하면 작은 따옴표와 큰 따옴표를 혼합하는 것에 대한 걱정을 저장할 수 있습니다.

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

변수가 함수로 배열로 전달 된 다음 extract()ed로 전달되거나 다른 방식으로 할당 될 수 있습니다. 또한 중괄호는 항상 필요하기 때문에 사용하지 말고 코드를 읽기 쉽게 만듭니다. (물론 the_content()과 같은 함수는 get_the_content()과 실질적으로 다릅니다 .__ WordPress가 항상이 스타일의 코딩을 쉽게 만드는 것은 아닙니다.)

비록 HTML, SQL 등의 heredoc 이름을 사용하면 내 IDE PhpStorm 구문 주입을 수행하고 자동 완성 및 구문 색상 지정을 제공합니다. 헤레독.

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

PHP에서이 함수를 체크 아웃하십시오 :

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

PHP 코드에 html 코드가 들어있는 포함 된 파일을 버퍼링 할 수 있습니다. 이렇게하면 유지 관리가 더욱 깔끔해질 것입니다.

그래서 당신은 이런 식으로 끝납니다 :

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

그렇다면 $ include.html을 반환 할 수 있습니다. HTML 내용을 PHP 문자열 내부에 모두 표시하지 않아도됩니다.

5
Todd Perkins

실제로이 프레임 워크를 사용하지는 않았지만 제공하는 템플릿 모델은 아마도 호소력을 발휘할 것입니다. 저자가 어떻게 설정했는지 살펴볼 수 있습니다.

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

템플릿 ========= 가능할 때마다 PHP를 HTML과 분리해야합니다. Wordpress에서, 당신은 두 가지가 섞이지 않고 함께 보일 것입니다. 이것은 종종 일을하는 "쉬운 방법"이지만, 거의 "올바른 방법"은 아닙니다. 대신, 우리는 두 가지를 분리해야합니다. 따라서 논리를 순수하고 견해를 멍청하게 유지해야합니다. 이를 위해 $ this-> render ( 'my-template') 메소드가 있습니다. 몇 가지 예 :

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

그것은 HTML과 JS의 유형에 달려 있습니다.

자바 스크립트

우선, 가능한 한 정적 부품과 동적 부품을 분리하십시오. 그런 다음 런타임에 필요한 동적 변수를로드하고 정적 스크립트를 헤더 (또는 꼬리말)에 넣습니다. 하지만 이렇게하면 JS의 대부분이 PHP와 분리됩니다.

HTML

이것은 PHP에서 코드를 깔끔하게 만드는 문제입니다. 재사용 할 거대한 HTML 덩어리가있는 경우이를 개별 변수로 저장합니다. shortcode가 호출 될 때 함께 연결하면 다음과 같이 간단합니다.

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

절차 적으로 구축하는 대신, 모든 다른 HTML 블록을 포함하는 객체 (예 : PHP 객체 지원)를 만든 다음 사용할 HTML 블록과 사용할 데이터를 지정하십시오. 이렇게하면 엄청난 시간을 절약 할 수 있습니다.

2
EAMann