2010-05-08 2 views

답변

23

당신은 PHP's alternative syntax for control structures를 사용할 수 있습니다 short_open_tags 명시 적으로 활성화 될 필요가있는 php.ini의 지침이다

<? if ($id == 2): ?> 
    <h2>some html</h2> 
<? else: ?> 
    <h2>another html chunk</h2> 
<? endif ?> 

하는 것으로, 그렇지 않으면 당신은 <?php 매번 작성해야합니다.

+1

나는 항상이 스타일을 사용합니다. 깨끗하게 보이고 코드 덩어리를 아주 쉽게 움직일 수있게 해줍니다. 무슨 일이 벌어지고 있는지 이해하는 것이 훨씬 쉽습니다. endif 또는 endwhile를 보는 것은 여러 개의 괄호에 더 반대한다고 알려줍니다. Btw, 예를 들어 세미콜론을 잊지 마라. 엔디프; 더 많은 코드를 추가해야하는 경우 : . – Alec

-2

By using this - PHP echo. 그게 당신이 원하는 것입니다. 즉, 많은 양의 HTML을 출력하고 있다면 계속 진행하는 것이 더 읽기 쉽습니다.

-2
<?php 

if($id == 2) { 
    //echo all your html stuff 
    echo "<title>Title is where id is 2</title>"; 
    echo "<h1>Hellow</h1>"; 

} 
else { 

    echo "<title>Title is where id isn't 2</title>"; 

} 

?> 
+0

Echoing html ??? 누가이 답변을 upvote 했습니까 ??? 어쨌든 디자이너들이 손을 얹었을 때 어떤 일이 일어날 지 궁금합니다. – Strae

+0

@DaNieL 모든 HTML을 반향하는 것은 좋은 생각이 아닙니다. 그러나 Donator가 초보자 인 것을 감안할 때, MVC, EOH 등으로 박쥐를 시작할 필요가 없습니다. 이는 HTML 구문을 반향하는 간단한 방법입니다. – ggfan

+0

확실하게 완전한 MVC 패턴은 초보자 (ehm ..와 나를 위해 ;;)에게는 조금 복잡하지만, 좋은 조언은 그의 목표를 달성하기 위해 작고 빠르게 구현할 다른 솔루션을 찾는 것이라고 생각합니다. 다른 점에서 실패하십시오. – Strae

1

나는 soulmerge 님의 방법을 좋아합니다. 그러나 종료 다른 더 :

<?php 

if ($id == 2) 
echo <<< END 
    <h2>some html</h2> 
END; 
else 
echo <<< END 
    <h2>another html chunk</h2> 
END; 

?> 
0

당신은 당신의 디자이너 쉽게 확인하려면, ... 이런 식으로

<? 
$html_1 = <<<EOH 
my html goes here 
EOH; 

$html_2 = <<<EOH 
my html <i>something else</i> html goes here 
EOH; 

echo ($id==2?$html_1:$html_2); 
?> 

Buuut 그것을 다만 외부 파일을 사용할 수 있습니다

<? 
$html=($id==2 ? file_get_contents("html_1.html") : file_get_contents("html_2.html")); 
$html=str_replace("%php generated content%", 1 + 1, $html); 
echo $html; 
?> 

미리 정의 된 키워드를 사용하여 PHP 계산 된 콘텐츠를 삽입하십시오 (% PHP 생성 콘텐츠 %이이 예에서 2 (1 + 1)로 대체 됨)

+0

원래 게시물은 디자이너와 코드를 공유하는 것에 대해 언급하지 않았으며, "beatifulness"에 대해서만 언급합니다. –

2

일부 HTML 코드에는 HEREDOC을 사용하는 것이 좋습니다. 이처럼

: 또한

<?php 
if($id==2) 
echo <<<EOT 
Blah 
EOT; 
else 
echo <<<EOT 
Your id is <b>{$id}</b> 
EOT; 
?> 

, 당신은 당신이 두 개의 파일을 가지고 접근 시도 할 수 있습니다 : PHP 파일과 PHTML 파일을. php 파일은 주요 로직이고, phtml 파일은 html 출력입니다. 귀하의 예제에서

등을

// logic.php file 
if($id==2) 
$sOutput = 'Yes'; 
else 
$sOutput = 'No'; 
// somewhere at the end of the file 
include 'logic.phtml'; 

// logic.phtml 
<html> 
<title><?=$sOutput?></title> 
<body> 
Blah blah blah <?=$sOutput?> you can login 
</body> 
</html> 
+0

추가 참고 사항 : 디자이너와 함께 작업하는 경우 더 많은 php 파일이 없기 때문에 더 깨끗한 phtml 파일을 선호 할 수 있습니다. – Daniel

+1

주의 깊고 짧은 태그는 php6에서 사용되지 않습니다 – Strae

+1

저는 개인적으로 heredocs의 HTML이 끔찍하다고 생각합니다. –

0

나는 개인적으로 내가 파일 사이에 그들을 일치 찾아 하나의 방법을 고수 선호로 짧은 태그를 사용하여 좋아하지 않는다.

<? if($id == 2) { ?> 

     <p>html goes here</p> 

<? } else  { ?> 

     <span>if id is not 2 then something goes here</span> 

<? }     ?> 

다른 답변의 일부뿐만 아니라 방법은 내가 가장 읽을 찾을 것보다 약간 더 간단 : 당신은 즉시 그렇게 같은 몇 가지 간단한 변화에 좀 더 읽기 쉽게 볼 수 있습니다. 그것은 다른 많은 좋은 방법들이 제안되었지만 (이것은 내가 어떻게 그것을 할 것인지에 대한 것이 라 할지라도) 당신 자신의 취향에 관한 것입니다.

+0

아마도 불필요한 공간이 너무 많을 수도 있지만 태그를 정렬하는 것이 더 좋을 것 같습니다. 나는 그렇게 까다 롭다. 사이드 노트와 마찬가지로 – Jack

+1

:' Strae

+0

나는 그것을 알았지 만 내 대답에서 그것을 알아 채지 못했습니다, 하하! 그것을 지적 주셔서 감사합니다. – Jack

5

당신은 MVC (모델, 뷰, CONTROLER) 디자인 패턴을 구현할 수, 코드 뷰로드 할 modele로 사용할 수 있습니다 다음 view.php에서

<?php 
if($id == 2) 
{ 
//somes variable and array controls 
} 
else 
{ 
//somes variable and array controls 
} 
//include the view 
include('view.php'); 
?> 

을, 당신은 HTML 페이지를 표시 PHP 변수와 배열에 대한 에코 만 있습니다.

+2

MVC 모델을 사용한다고해도보기에 단순한 논리가있을 수 없습니다. 컨트롤러에서보기에 배열을 전송하면 여전히 예를 들어 foreach() 배열의 변수를 표시합니다. 그 시점에서 원래의 질문으로 되돌아갑니다. – Alec

+0

거기에 아무 문제가 없습니다, 내가 MVC 구현에 대한이 스레드를 볼 수있는 곳으로 의견을 게시 할 수 있습니다. http://stackoverflow.com/questions/2333093/how-to-implement-mvc-from-scratch-in-php/2799399 # 2799399 –

2

다른 많은 권장 사항으로 MVC를 사용할 수 있습니다. 엄격한 MVC 구조를 구현하고 싶지 않으면 어쨌든 템플릿 시스템을 사용해야합니다.

이것은 당신이 현명하게 배워야한다는 것을 의미하지는 않습니다. 실제로 필요한 기능 만 사용하여 자신 만의 템플리트 시스템을 작성할 수 있습니다.

디자이너와 함께 작업하면서 성능이 중요하지 않은 경우 동적 콘텐츠가 있어야하는 간단한 자리 표시자가있는 html 파일을 만든 다음 php (str_replace, preg_replace)로 바꿀 수 있습니다.하지만이 작업은 응용 프로그램 속도가 느려집니다.

예 :

//html template 
// the @[var] syntax is just as an example 
<title>@[title]</title> 
<body> 
    @[content] 
</body> 

하고 템플릿 파일 :

$title = 'Hello world'; 
if($id == 2){ 
    $content = get_content(); 
}else{ 
    $content = get_another_content(); 
} 
//really, this is just as example ;) 
ob_start(); 
include('template.html'); 
$output = ob_get_clean(); 
echo str_replace(
    array('@[title]', '@[content]'), 
    array($title, $content), 
    $output 
); 

이 정말 기본 예제이며,이 문제가 있습니다

  1. 성능;
  2. 디자이너는 자리 표시자를 만지지 않도록 지시해야합니다.

더 간단 솔루션은 다음과 같습니다

//html template 
<title><?php echo $title; ?></title> 
<body> 
    <?php echo $content; ?> 
</body> 

및 PHP는 :

$title = 'Hello world'; 
if($id == 2){ 
    $content = get_content(); 
}else{ 
    $content = get_another_content(); 
} 
include('template.php'); 

그러나 HTML을 반향하는 것은 가능한 한 줄여야은 좋은 방법이 아닙니다과 콘텐츠 와 논리를 혼합 Logic is logic, data is data, and life is good

0

DaNieL의 답변에 다음과 같이 추가 할 수 있습니다.

function htmlVars($html, $vars){ 
    $html = preg_replace_callback('/@\[([0-9a-zA-Z_\$]*)\]/',function ($matches) use ($vars){ 
    return isset($vars[$matches[1]])?$vars[$matches[1]]:""; 
},$html); 
return $html; 
} 

예 :

echo htmlVars('foo is @[foo] and bar is not @[bar]', 
    Array('foo'=>'foo','bar'=>'barz')); 

결과 :

foo is foo and bar is not barz 

익명 기능은 내가 좋겠, PHP 5.3 이상 가능한 미래 (디자인) 유지 보수에 대한 높은

4

작동 다음과 같이 제안하십시오.

<?php 
if ($id == 2){ 
$someText = 'I like your id!'; 
}else{ 
$someText = 'I love your id!'; 
} 
?> 
<html> 
...complex html... 
<p><?php echo $someText ?></p> <!-- or <?= $someText ?> --> 
...complex html... 
</html> 
0

두 가지 사례가 있습니다.

1) 템플릿 코드. soulmerge가 제어 구조에 대한 대체 구문을 사용하는 것이 좋습니다.

2) 출력을 생성하는 짧은보기 도우미 PHP 코드 (대개 나중에 대체 할 수 있음)는 반드시 자신의 하위 템플릿을 필요로하지 않습니다.

public function draw(){ 
    $html = array(); 
    foreach($this->item as $item){ 
     $html[] = <<<EOD 
<li class="{$item->class()}">{$item->label()}</li> 
EOD; 
    } 
    return implode($html); 
} 

내가 ob_start()?> <?php 블록을 포함 할 수 남았습니다 다른 모든 종류의 이상이 선호 : 2의

내가 좋아하는 뭔가를 선호합니다. 항상 출력을 에코하지 않고 직접 문자열을 반환하여 피 호출자가 호출 버퍼에 출력 버퍼링의 부담을 넘기지 않고 결과를 연결하고 조작 할 수있는 옵션을 원합니다.

heredoc을 사용하면 문자열 출력을 쉽게 식별 할 수 있으며 들여 쓰기가 깨지는 것은 일종의 추측이라고 생각하지만 HTML 출력이 작은 스티커 메모처럼 두드러지게 나타납니다. 사실, 그리고 내 IDE (PDT)에서 녹색으로 멋지게 강조 표시됩니다. (SO 형광펜에서는 보이지 않습니다.) 그래서 정확히 어떤 종류의 "모드"인지 정확히 명시하고 있습니다.

대조적으로 ?> <?php 기술을 사용하면 html과 PHP 코드를 구별하기가 어려워집니다. 몇 번 해보면 ?> 또는 <?php이 필요한지 여부를 추적하는 것이 짜증납니다. 마지막으로 대용 암호를 사용하는 경우가 종종 발생합니다. 대 {$obj->func()}

코드가 복잡 해지면 리팩터링 할 시간이 필요할 수 있습니다. 나는 heredoc을 좋아한다. 왜냐하면 만약 내가 뭔가 특별한 일을하고 있다면, 그것은 두드러지게 나타날 것이다. 왜냐하면 내가했을 때 (당신이 요구 사항을 추가 할 때 임시 변통하는 경향이있다) 5 개로 시작했을지도 모르는 40 줄의 heredoc이 있습니다. 내가 돌아와서 내 코드를보고 완전하지 않은 버전을 개발할 때 파일의 잘못된 부분을 식별하는 것이 훨씬 쉽습니다. 이것은 스티커 메모로 돌아가며, 들여 쓰기에 대해서도 내가 그린 강조 표시를 강조 표시합니다.

관련 문제