<?
if($id == 2) {
?>
html goes here
<?
}
else {
?>
if id is not 2 then something goes here
<?
}
?>
어떻게 똑똑한 학습 없이도 하나의 파일에 php + html을 더 아름답게 쓸 수 있습니까?더 아름다운 하나의 파일에 PHP + HTML을 작성하는 방법?
<?
if($id == 2) {
?>
html goes here
<?
}
else {
?>
if id is not 2 then something goes here
<?
}
?>
어떻게 똑똑한 학습 없이도 하나의 파일에 php + html을 더 아름답게 쓸 수 있습니까?더 아름다운 하나의 파일에 PHP + HTML을 작성하는 방법?
당신은 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
매번 작성해야합니다.
나는 항상이 스타일을 사용합니다. 깨끗하게 보이고 코드 덩어리를 아주 쉽게 움직일 수있게 해줍니다. 무슨 일이 벌어지고 있는지 이해하는 것이 훨씬 쉽습니다. endif 또는 endwhile를 보는 것은 여러 개의 괄호에 더 반대한다고 알려줍니다. Btw, 예를 들어 세미콜론을 잊지 마라. 엔디프; 더 많은 코드를 추가해야하는 경우 : 엔디프; // more code?>. – Alec
By using this - PHP echo. 그게 당신이 원하는 것입니다. 즉, 많은 양의 HTML을 출력하고 있다면 계속 진행하는 것이 더 읽기 쉽습니다.
<?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>";
}
?>
Echoing html ??? 누가이 답변을 upvote 했습니까 ??? 어쨌든 디자이너들이 손을 얹었을 때 어떤 일이 일어날 지 궁금합니다. – Strae
@DaNieL 모든 HTML을 반향하는 것은 좋은 생각이 아닙니다. 그러나 Donator가 초보자 인 것을 감안할 때, MVC, EOH 등으로 박쥐를 시작할 필요가 없습니다. 이는 HTML 구문을 반향하는 간단한 방법입니다. – ggfan
확실하게 완전한 MVC 패턴은 초보자 (ehm ..와 나를 위해 ;;)에게는 조금 복잡하지만, 좋은 조언은 그의 목표를 달성하기 위해 작고 빠르게 구현할 다른 솔루션을 찾는 것이라고 생각합니다. 다른 점에서 실패하십시오. – Strae
나는 soulmerge 님의 방법을 좋아합니다. 그러나 종료 다른 더 :
<?php
if ($id == 2)
echo <<< END
<h2>some html</h2>
END;
else
echo <<< END
<h2>another html chunk</h2>
END;
?>
당신은 당신의 디자이너 쉽게 확인하려면, ... 이런 식으로
<?
$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)로 대체 됨)
원래 게시물은 디자이너와 코드를 공유하는 것에 대해 언급하지 않았으며, "beatifulness"에 대해서만 언급합니다. –
일부 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>
나는 개인적으로 내가 파일 사이에 그들을 일치 찾아 하나의 방법을 고수 선호로 짧은 태그를 사용하여 좋아하지 않는다.
<? if($id == 2) { ?>
<p>html goes here</p>
<? } else { ?>
<span>if id is not 2 then something goes here</span>
<? } ?>
다른 답변의 일부뿐만 아니라 방법은 내가 가장 읽을 찾을 것보다 약간 더 간단 : 당신은 즉시 그렇게 같은 몇 가지 간단한 변화에 좀 더 읽기 쉽게 볼 수 있습니다. 그것은 다른 많은 좋은 방법들이 제안되었지만 (이것은 내가 어떻게 그것을 할 것인지에 대한 것이 라 할지라도) 당신 자신의 취향에 관한 것입니다.
는당신은 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 변수와 배열에 대한 에코 만 있습니다.
MVC 모델을 사용한다고해도보기에 단순한 논리가있을 수 없습니다. 컨트롤러에서보기에 배열을 전송하면 여전히 예를 들어 foreach() 배열의 변수를 표시합니다. 그 시점에서 원래의 질문으로 되돌아갑니다. – Alec
거기에 아무 문제가 없습니다, 내가 MVC 구현에 대한이 스레드를 볼 수있는 곳으로 의견을 게시 할 수 있습니다. http://stackoverflow.com/questions/2333093/how-to-implement-mvc-from-scratch-in-php/2799399 # 2799399 –
다른 많은 권장 사항으로 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
);
이 정말 기본 예제이며,이 문제가 있습니다
더 간단 솔루션은 다음과 같습니다
//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
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 이상 가능한 미래 (디자인) 유지 보수에 대한 높은
작동 다음과 같이 제안하십시오.
<?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>
두 가지 사례가 있습니다.
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이 있습니다. 내가 돌아와서 내 코드를보고 완전하지 않은 버전을 개발할 때 파일의 잘못된 부분을 식별하는 것이 훨씬 쉽습니다. 이것은 스티커 메모로 돌아가며, 들여 쓰기에 대해서도 내가 그린 강조 표시를 강조 표시합니다.
아름다움은 ... 정말 중요하지 않습니다. 디자이너와 함께 작업하는 경우 짧은 태그가 필요할 수 있습니다. – bschaeffer