在CodeIgniter中结合PHP和HTML的最佳方法?

时间:2013-09-11 09:30:40

标签: php codeigniter templates

我接手了一个PHP应用程序,代码非常混乱所以在进行任何重大更改之前我决定将其重写为MVC(CodeIgniter)。至于纯html部分,我使用$this->load->view(file);技术,但我不知道如何应对这样的事情:

  echo "<tr>";
  echo "<td class=\"border szczegolyTd\">";
  echo "Kamp.: ".$kampania[$kamp]['idProject'];
  echo "<br />";
  echo "<b>".$kampania[$kamp]['name']."</b><br />";
  echo "<div class='szczegolyDiv'><a class=\"pokaz szczegoly\" href=\"?pokaz=".$kampania[$kamp]['idProject']."\">";
  echo "SZCZEGÓŁY";
  echo "</a></div>";
  if (isset($kampania[$kamp]['timestamp'][$iloLeftCustomers-1])) echo "<br />Dane od: <br /><b>".$kampania[$kamp]['timestamp'][$iloLeftCustomers-1]."</b>";
  echo "<br />do: <br /><b>".$kampania[$kamp]['timestamp'][0]."</b>";
    //echo "<br />".$ilOstatnichRozmow;
  polacz();
  $querySpr = mysql_fetch_assoc(mysql_query("SELECT COUNT(*) AS ile FROM lista WHERE user=".$_SESSION['loginid']." AND kampania=".$kampania[$kamp]['idProject'].""));
  rozlacz();
  if ($querySpr['ile']==0) {
    echo "<div id=\"".$kampania[$kamp]['idProject']."\" class=\"tabDodaj\">DODAJ DO OBSERWOWANYCH</div>";
  }else{echo "<div class='komunikatMasz'>Masz tę kampanię na liście.</div>";}

  echo "</td>";

我是CodeIgniter(以及一般的MVC)的初学者,所以我不知道它的所有功能和选择。也许不可能完全分离这两种技术 - 所以主要使用html并使用php转义<? ?>脚本或使用php和{{1}更为优雅} echo部分?

3 个答案:

答案 0 :(得分:1)

你总是可以在模板文件中编写html并在其中插入php来循环或回显。

echo "<tr>";
echo "<td class=\"border szczegolyTd\">";
echo "Kamp.: ".$kampania[$kamp]['idProject'];
echo "<br />";

可能是:

<tr>
<td class="border szczegolyTd">
Kamp.: <?php echo $kampania[$kamp]['idProject']; ?>
<br />

将代码置于这些PHP标记中实际上会激活该调用。请注意,保持html干净的商务代码,确保你只使用echo,foreach,for或if。

在CodeIgniter中,您可以渲染视图文件并插入“部分”视图,并使用TRUE为第3个参数在主模板中回显它。这只是在输出时立即缓冲输出。

$data['content'] = $this->load->view('ding/templatefile',$vars,TRUE); 

答案 1 :(得分:0)

如果你真的是新手,请按照tutorial这个不错的&amp;&amp;信息。

是的,有可能,最好的用途是短标记+等号<strong><?=$variable?></strong>,只要您使用$variable使用

,它就会回显foreach()中的任何内容
foreach($elements as $element) {

    $string = "";
    $string .= "new line" . $element->id . "<br>";
    $string .= "line 2" . $element->name;

    echo $string;

}

或只是你想要的回声线

foreach($elements as $element) {

    echo "new line" . $element->id . "<br>";
    echo "line 2" . $element->name;

}

但请记住,在进入foreach循环之前,请检查一下你是否有有效的$变量。 (empty()isset()$variable != FALSE ...)

请注意: 如果您在回应基本文本时需要条件

<strong><?=(condition) ? 'TRUE' : 'FALSE' ?></strong>

例如

<strong><?=(isset($variable)) ? $variable : '' ?></strong>

答案 2 :(得分:0)

我建议你去了解一下MVC如何工作的流程,但这应该指向正确的方向。

在控制器中,您实例化数据模型,如:

$this->load->model("lista");

然后,

$data = $this->lista->getCountList($_SESSION['loginid'], $kampania[$kamp]['idProject']); 

在lista模型中你有这个功能:

getCountLista($loginId, $projectId)

执行此部分:

return mysql_fetch_assoc(mysql_query("SELECT COUNT(*) AS ile FROM lista WHERE user=".$loginId." AND kampania=".$projectId.""));

然后将返回的数据传递给视图

$this->load->view(file, array("listData" => $data));

并在视图中:

$listaData[$kamp]['idProject']

它在视图中传递的数组的视图foreach项中创建一个变量。

我建议您阅读有关MVC的文档。