0

除了像 smarty 这样的模板引擎之外,对于这样的巨大代码,还有更好的解决方案吗?

<table class="table table-striped dataTable table-bordered">
    <thead>
        <tr>
            <?php
            $output  = '<th class="sorting_numeric_html sorting_default_desc">' . TH_ORDERS_ID . '</th>';
            $output .= '<th class="sorting_date_eu">' . TH_ORDERS_DATE . '</th>';
            $output .= '<th>' . TH_ORDERS_NAME . '</th>';
            $output .= '<th>' . TH_ORDERS_STATUS . '</th>';
            $output .= '<th class="sorting_disabled">' . TH_ACTION . '</th>';
            echo $output;
            ?>
        </tr>
     </thead>
     <tbody>
        <?php
            $output = '';
            foreach ($orders['RESULT'] as $order) {
                $output .= '<tr>';
                $output .= '<td class="text-right">' . inc_buildLink(inc_url(FILENAME_ORDERS, 'oID=' . $order['orders_id'] . '&action=edit'), $order['orders_id']) . '</td>';
                $output .= '<td>' . inc_datetime_short($order['date_purchased']) . '</td>';
                $output .= '<td>' . inc_buildLink(inc_url(FILENAME_CUSTOMERS, 'cID=' . $order['customers_id']. '&action=edit'), $order['delivery_name']) . '</td>';
                $output .= '<td class="status' . $order['orders_status'] . '">' . $order['orders_status_name'] . '</td>';
                $output .= '<td class="btn-group actions">';
                $output .= inc_buildLink(inc_url(FILENAME_ORDERS, 'oID=' . $order['orders_id'] . '&action=edit'),
                inc_image(DIR_WS_ICONS . 'edit.png', ''), TOOLTIP_EDIT, 'class="tip btn btn-mini"');
                $output .= modal_delete_orders($order['customers_name'], $order['orders_id'], 'class="tip btn btn-mini"');
                $output .= '</td>';
                $output .= '</tr>';
            }
            echo $output;
        ?>
     </tbody>
</table>

Smarty 肯定是一个解决方案,但还有其他方法吗?

4

2 回答 2

3

我会这样做,使其更易于阅读,因为 HTML 与 PHP 更加分离:

<table class="table table-striped dataTable table-bordered">
<thead>
<tr>
    <th class="sorting_numeric_html sorting_default_desc"><?php echo TH_ORDERS_ID; ?></th>
    <th class="sorting_date_eu"><?php echo TH_ORDERS_DATE; ?></th>
    <th><?php echo TH_ORDERS_NAME; ?></th>
    <th><?php echo TH_ORDERS_STATUS; ?></th>
    <th class="sorting_disabled"><?php echo TH_ACTION; ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($orders['RESULT'] as $order): ?>
    <tr>
        <td class="text-right"><?php echo inc_buildLink(inc_url(FILENAME_ORDERS, 'oID=' . $order['orders_id'] . '&action=edit'), $order['orders_id']); ?></td>
        <td><?php echo inc_datetime_short($order['date_purchased']); ?></td>
        <td><?php echo inc_buildLink(inc_url(FILENAME_CUSTOMERS, 'cID=' . $order['customers_id'] . '&action=edit'), $order['delivery_name']); ?></td>
        <td class="status<?php echo $order['orders_status']; ?>"><?php echo $order['orders_status_name']; ?></td>
        <td class="btn-group actions">
            <?php echo inc_buildLink(inc_url(FILENAME_ORDERS, 'oID=' . $order['orders_id'] . '&action=edit'),
                inc_image(DIR_WS_ICONS . 'edit.png', ''), TOOLTIP_EDIT, 'class="tip btn btn-mini"'),
            modal_delete_orders($order['customers_name'], $order['orders_id'], 'class="tip btn btn-mini"'); ?>
        </td>
    </tr>
<?php endforeach; ?>
</tbody>

代替<php echo你也可以使用<?=,但是很多人不喜欢使用它。放回声只有4个字符,所以我会坚持下去!

于 2013-10-12T14:25:26.820 回答
2

是的,您通常希望尽可能多地分离 PHP 和 HTML,只留下 html,如下所示:

<table class="table table-striped dataTable table-bordered">
  <thead>
    <tr>
      <th class="sorting_numeric_html sorting_default_desc">
        <?php echo TH_ORDERS_ID; ?>
      </th>
      <th class="sorting_date_eu">
        <?php echo TH_ORDERS_DATE; ?>
      </th>
      ...

如果您的系统支持它,您可以尝试更改<?php echofor ,这在手册<?=中被称为短标签,在这种情况下,代码看起来会更整洁:

<table class="table table-striped dataTable table-bordered">
  <thead>
    <tr>
      <th class="sorting_numeric_html sorting_default_desc">
        <?= TH_ORDERS_ID; ?>
      </th>
      <th class="sorting_date_eu">
        <?= TH_ORDERS_DATE; ?>
      </th>
      ...

但是,有几点需要您进一步更改代码。它们现在可能不是,但它们更适合您未来的代码:

  • 你为什么要回显常量?通常,您希望将数据存储在变量中,然后回显它们。
  • 通常最好避免在 html 中放置过多的类,因为 CSS 通常会更好地缓存。我会选择一个id="tableorders"然后简单class="id"的,class="date"依此类推。
于 2013-10-12T14:23:59.643 回答