【问题标题】:PHP/TWIG : for loop to build HTML divsPHP/TWIG : for 循环构建 HTML div
【发布时间】:2013-08-21 08:58:14
【问题描述】:

我来自 ASP.NET MVC,以下很容易做到。我想知道如何使用 PHP 和 TWIG 来完成。

我想动态构建一系列HTML div。一个 div 看起来像这样:

<div class="grid_gallery-item">               
    <img src="img/gallery/gallery_grid1.jpg" alt=""/>                       
    <a href="img/gallery/gallery_grid1.jpg"></a>
 </div>

图像的 src 属性以及超链接的 href 对于每个 div 应该是不同的。我想在 for 循环中执行此操作,使用增量器更改 src 和 href 路径。

另一个困难是我使用资产(symfony2)作为我的路径。所以src属性和href属性其实是这样的:

{{asset('img/gallery/gallery_grid1.jpg')}}

我该怎么做?

【问题讨论】:

    标签: php symfony twig assetic


    【解决方案1】:

    使用

    {% for div in divs %}
        <div class="grid_gallery-item">               
            <img src="{{ div.src }}" alt=""/>                       
            <a href="{{ div.href }}"></a>
        </div>
    {% endfor %}
    

    这里是php代码

        $array = array(
          array('src' => 'image here',
                'href' => 'link here'),
          array('src' => 'image here',
                'href' => 'link here'),
    
        );
    $twig->render('page.twig', array('divs' => $array));
    

    【讨论】:

    • 不确定我是否理解。 for循环中的html在哪里?此外,'gallery_grid' 后面的 '1' 应该来自 for 循环的增量器。
    • 我为不完整的代码道歉,我已经编辑了我的答案看看它
    • 我认为这是最好的方法,因为数组现在内置在控制器中并与视图一起返回。我想我需要找到如何从源文件夹中的图像动态构建数组。我想我应该为此打开一个不同的帖子,因为它与原始问题无关。
    • 使用DirectoryIterator在运行时填充数组(来自文件系统)或来自数据库使用PDOmysqli扩展
    【解决方案2】:

    从未使用过assetic,但我认为您应该能够使用PHP alternative syntax轻松做到这一点。

    <?php $myArray = array('1','2','3'....); //this can store full image paths also?>
    
    <?php foreach($myArray as $item): ?>
    <div class="grid_gallery-item">               
        <img src="{{asset('img/gallery/gallery_grid<?php echo $item; ?>.jpg')}}" alt=""/>                       
        <a href="{{asset('img/gallery/gallery_grid<?php echo $item; ?>.jpg')}}"></a>
    </div>
    <?php endforeach; ?>
    

    我希望它有所帮助。如果您需要更多详细信息,请告诉我。

    更新: 要从目录中读取每个文件,请使用:

    <?php 
    $dirname = 'dirname'; 
    $directory = new DirectoryIterator(dirname(__FILE__).'/../'.$dirname); //modify path to your needs 
    ?>
    
    <?php foreach($directory as $file): 
             if(!$file->isDot()): ?>
       <div class="grid_gallery-item">               
            <img src="{{asset('<?php echo $dirname.'/'.$file->getFilename(); ?>')}}" alt=""/>                       
            <a href="{{asset('<?php echo $dirname.'/'.$file->getFilename(); ?>')}}"></a>
       </div>
     <?php endif;
         endforeach; ?>
    

    我还没有尝试过这部分,但它应该可以工作。只需根据您的需要进行修改即可。

    【讨论】:

    • 非常有帮助。我会试一试。我认为有一个错字:它不应该是 $item 而不是 $i 吗?
    • 让我明白这一点。您是将图像名称存储在数组中,还是只想一遍又一遍地增加相同的图像名称,直到达到某个值?
    • 好的,你写的代码对我来说是一个好的开始。下一步是理想情况下,图像路径应该确实存储在数组中。更好的是,我应该在磁盘上提供一个文件夹名称,以便使用文件夹中的图像构建阵列。你知道这是否可能吗?可能我应该采用@punk 方法并在控制器中执行此操作。
    • 我将把这个作为答案,尽管@punk 方法也很好,我认为我会混合使用这两种方法。谢谢大家!
    猜你喜欢
    • 2014-01-17
    • 2018-11-23
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    相关资源
    最近更新 更多