Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP模板-使用PHP_Php_Templates - Fatal编程技术网

PHP模板-使用PHP

PHP模板-使用PHP,php,templates,Php,Templates,您见过的最优雅的模板(最好是纯PHP)解决方案是什么 具体而言,我感兴趣的是处理: 在重复块中检测它是第一个还是最后一个元素 易于处理奇数/偶数情况,如斑马条纹桌子或类似物品 其他的模逻辑,你每次都会做一些事情 我正在寻找一种能减轻痛苦的方法: <?php $persons = array('John', 'Jack', 'Jill', 'Jason'); ?> <?php $i = 0; ?> <?php if (isset($persons)): ?>

您见过的最优雅的模板(最好是纯PHP)解决方案是什么

具体而言,我感兴趣的是处理:

  • 在重复块中检测它是第一个还是最后一个元素
  • 易于处理奇数/偶数情况,如斑马条纹桌子或类似物品
  • 其他的模逻辑,你每次都会做一些事情
  • 我正在寻找一种能减轻痛苦的方法:

    <?php
    $persons = array('John', 'Jack', 'Jill', 'Jason');
    ?>
    
    <?php $i = 0; ?>
    <?php if (isset($persons)): ?>
    <ul>
    <?php foreach ($persons as $name): ?>
        <li class="<?= ($i++ % 2 === 0) ? 'odd' : 'even' ?>"><?= $name ?></li>
    <?php endforeach ?>
    </ul>
    <?php endif ?>
    
    
    

      我一直使用模,就像你在例子中所做的那样。

      很小但很强

      它不会犯在页面中嵌入另一种宏语言的聪明错误,但它允许您处理我曾经抛出的每一个实际的web显示问题。特别是,上述奇偶结构是一个棘手的问题。类似于从数据库表中选择的代码

      在PHP文件中

      $TBS->MergeBlock('blk1',$sqlconnect, "SELECT name from people ");
      
      在HTML文件中

      <ul>
          <li class="odd">[blk.name;block=ul]</li>
          <li class="even">[blk.name;block=ul]</li>
      </ul>
      
      • [blk.name;block=ul]
      • [blk.name;block=ul]
      就这样。请注意,HTML与Dreamweaver完全兼容。此外,如果我想在三种线条样式上进行替换,我需要做的就是添加额外的线条,可能是不同的类,所以

      <ul>
          <li class="linestyle1">[blk.name;block=ul]</li>
          <li class="linestyle2">[blk.name;block=ul]</li>
          <li class="linestyle3">[blk.name;block=ul]</li>
      </ul>
      
      • [blk.name;block=ul]
      • [blk.name;block=ul]
      • [blk.name;block=ul]

      如果让您感到不安的是开始和结束标记,请编写一个函数来创建html字符串,然后让它返回。至少它会为您节省一些标记。

      它不是纯PHP(当时的模板语法),但它确实很好用

      对于循环,您可以执行以下操作:

      
      <ul>
      {foreach from=$var name=loop item=test}
        {if $smarty.foreach.loop.first}<li>This is the first item</li>{/if}
        <li class="{cycle values="odd,even"}">{$var.name}</li>
        {if $smarty.foreach.loop.last}<li>This was the last item</li>{/if}
      {/foreach}
      </ul>
      
      
      
        {foreach from=$var name=loop item=test} {if$smarty.foreach.loop.first}
      • 这是第一项
      • {/if}
      • {$var.name}
      • {if$smarty.foreach.loop.last}
      • 这是最后一项
      • {/if} {/foreach}
      我过去用过。它很结实。正如你可能从网站上看到的;它有相当大的用户群,并定期更新


      它也是用纯PHP编写的。

      您考虑过吗?。它(或类似的东西)的一个主要好处是,您可以获得可以通过验证的模板。大多数php模板引擎似乎忽略了这一点。

      您不需要多次打开标记。如果您多次执行相同的操作,也可以从中生成函数:

      <?php
      function makeul($items, $classes) {
        $c = count($classes);
        $out = "";
      
        if (isset($items) && count($items) > 0) {
          $out = "<ul>\n";
          foreach ($items as $item) {
            $out .= "\t<li class=\"" . $classes[$i++%$c] . "\">$item</li>\n";
          }
          $out .= "</ul>\n";
        }
        return $out;
      }
      ?>
      
      other page content
      
      <?php
      $persons = array('John', 'Jack', 'Jill', 'Jason');
      $classes = array('odd', 'even');
      print makeul($persons, $classes);
      ?>
      
      是一个轻量级的纯PHP模板引擎。版本2有一个类似于前面提到的Smarty的插件。我在版本3中找不到对同一插件的引用,但我相信您可以相当轻松地编写它。

      我使用模板,因为它是用100%实际HTML编写的,带有占位符数据,因此它甚至可以在网页设计师的所见即所得编辑器中工作。这很容易理解

      这是我想要的。请原谅标记,我是新来的,四个空格块对我来说不合适(列表是一个列表,而不是标记)

      PHP代码:

      $tal=新PHPTAL; $tal->setTemplate('people.htm') ->集合('people',数组('John','Jack','Jill','Jason'); echo$tal->execute(); 模板:

        约翰·多伊
      输出:

      约翰杰克吉尔杰森


      很明显,我不会为这一点创建模板,但我可以使用宏来创建模板,或者构建整个页面并包含该变量。但你明白了。由于简单(没有像smarty那样需要学习的新语法),使用HAML使我在模板和编程方面的速度提高了三倍。

      我已经是HAML的粉丝很长一段时间了,现在看来PHP爱好者已经有了HAML:请参阅关于循环的小帮助:

      <? $b=false; foreach($MyList as $name) { ?>
         <li class="row<?= $b=!$b ?>"><?= htmlspecialchars($name); ?></li>
      <? } ?>
      
      
      
      
      
      你的做法正好相反。您的第一项现在称为偶数,而不是奇数。使用+++$i


      我也有同样的问题。但我认为你最初的解决方案是最整洁的。那我就这么说。

      怎么样?唯一有标准机构支持的模板系统。在编程语言中也是如此。学一次,到处用

      我刚才用PHP创建了一个简单的模板系统来解决这个问题:

      它需要一个多维数组,并且需要向HMTL添加一些额外的标记来创建组合模板

      它并没有Smarty和其他一些解决方案那个么复杂(尽管功能强大),但在很多时候都以简单取胜。菜单创建的演示:

      <p>Main Menu</p>
      <ul>
      {block:menu_items}
              <li><a href="{var:link}">{var:name}</a></li>
      {/block:menu_items}
      </ul>
      
      将创建菜单

      <p>Main Menu</p>
      <ul>
              <li><a href="home.htm">Home</a></li>
              <li><a href="about.htm">About Us</a></li>
              <li><a href="portfolio.htm">Portfolio</a></li>
              <li><a href="contact.htm">Contact Us</a></li>
      </ul>
      
      主菜单

      Symfony组件:模板化
      (来源:)

      Symfony打算转移到一个基于轻量级PHP模板系统的新模板系统上

      首席开发商Fabien Povertier在这里解释了这一决定:

      Symfony通常可以得到回复,以便就此类问题做出非常明智的决定,因此此框架应该是需要研究的东西


      组件在这里:

      如果只是应用CSS样式,为什么不使用:nth of type(奇数)选择器呢

      例如: 李:第n种类型(奇数){ 背景#f2f6f8; 背景:线性梯度(顶部,#f2f6f8 0%,#e0eff9 100%); }

      在此处输入代码

      
      
      <?php
          define ('CRLF', "\r\n");
          $persons = array('John', 'Jack', 'Jill', 'Jason');
      
          $color = 'white'; // Init $color for striped list
          $ho = '<UL>' . CRLF; // Start HTML Output variable
          foreach ($persons as $name)
          {
             $ho .= '  <li class="' . $color . '">' . $name . '</li>' . CRLF;
             $color = ($color == 'white') ? 'grey' : 'white'; // if white, make it grey else white
          }
          $ho .= '</ul>' . CRLF;
          echo $ho;
      ?>
      

      我想这一条已经被打死了。是的,这有点超出了对任何峡湾的渴望:)这条代码没有公认答案中的代码复杂;)我知道它很受欢迎,但我认为Smarty是有史以来最差的公共图书馆之一。为什么它是最差的公共图书馆之一?我在这些评论中没有足够的空间来写一个真正的答案,但基本上是因为它是一种完全不同的语言,而且有很多东西
      <? $b=false; foreach($MyList as $name) { ?>
         <li class="row<?= $b=!$b ?>"><?= htmlspecialchars($name); ?></li>
      <? } ?>
      
      <?= ($i++ % 2 === 0) ? 'odd' : 'even' ?>
      
      <p>Main Menu</p>
      <ul>
      {block:menu_items}
              <li><a href="{var:link}">{var:name}</a></li>
      {/block:menu_items}
      </ul>
      
          array (
              'menu_items' => array (
                      array (
                              'link' => 'home.htm',
                              'name' => 'Home'
                      ),
                      array (
                              'link' => 'about.htm',
                              'name' => 'About Us'
                      ),
                      array (
                              'link' => 'portfolio.htm',
                              'name' => 'Portfolio'
                      ),
                      array (
                              'link' => 'contact.htm',
                              'name' => 'Contact Us'
                      )
              )
      );
      
      <p>Main Menu</p>
      <ul>
              <li><a href="home.htm">Home</a></li>
              <li><a href="about.htm">About Us</a></li>
              <li><a href="portfolio.htm">Portfolio</a></li>
              <li><a href="contact.htm">Contact Us</a></li>
      </ul>
      
      <?php
          define ('CRLF', "\r\n");
          $persons = array('John', 'Jack', 'Jill', 'Jason');
      
          $color = 'white'; // Init $color for striped list
          $ho = '<UL>' . CRLF; // Start HTML Output variable
          foreach ($persons as $name)
          {
             $ho .= '  <li class="' . $color . '">' . $name . '</li>' . CRLF;
             $color = ($color == 'white') ? 'grey' : 'white'; // if white, make it grey else white
          }
          $ho .= '</ul>' . CRLF;
          echo $ho;
      ?>