0

在我的 Joomla 网站上生成阅读次数最多的文章列表并显示其介绍图像的代码如下:

<ul class="mostread<?php echo $moduleclass_sfx; ?>">



    <?php foreach ($list as $item) : ?>
      <?php $images = json_decode($item->images); ?>
        <?php if( $images->image_intro ) : ?>
            <img src="<?php echo $images->image_intro; ?>" alt="<?php echo htmlspecialchars($item->title); ?>" />
        <?php endif; ?>
    <li itemscope itemtype="https://schema.org/Article">
        <a href="<?php echo $item->link; ?>" itemprop="url">
            <span itemprop="name">
                <?php echo $item->title; ?>
            </span>
        </a>
    </li> 
    <?php endforeach; ?>


</ul>

几乎没有使用 PHP 的经验,我需要对这段代码做些什么才能让它只显示第一项的图像而不是所有的图像?

4

4 回答 4

0

试试这样。。

$first = true;在显示第一项后设置一个变量,将其设置为false

<ul class="mostread<?php echo $moduleclass_sfx; ?>">

    <?php 
    $first = true;//initially set true
    foreach ($list as $item) : ?>
      <?php $images = json_decode($item->images); ?>
        if($first==true){ ?> //checks $first is true if true prints
        <?php if( $images->image_intro ) : ?>
            <img src="<?php echo $images->image_intro; ?>" alt="<?php echo htmlspecialchars($item->title); ?>" />
        <?php endif;

    <li itemscope itemtype="https://schema.org/Article">
        <a href="<?php echo $item->link; ?>" itemprop="url">
            <span itemprop="name">
                <?php echo $item->title; ?>
            </span>
        </a>
    </li> 

    <?php 
    }
    $first = false;//after printing first item set it false
    endforeach; ?>


</ul>
于 2017-02-17T17:54:54.140 回答
0

@hek-mat 很接近,但 OP 试图阻止显示其他帖子上的图像,而不是显示链接和标题

<?php
  // track if we've seen an image yet or not
  $seen_first = false;

  foreach ( $list as $item ) :
    $images = json_decode( $item->images );

    // OP only wants posts with image_intros
    if ( $images->image_intro ) :

      // OP only wants to see the first item's image
      if ( ! $seen_first ) :
        ?>
          <img src="<?php echo $images->image_intro; ?>" alt="<?php echo htmlspecialchars( $item->title ); ?>" />
        <?php

        // don't show another image
        $seen_first = true;

      // end "if first not seen yet"
      endif;

      // show the article (for all)
      ?>
        <li itemscope itemtype="https://schema.org/Article">
          <a href="<?php echo $item->link; ?>" itemprop="url">
            <span itemprop="name"><?php echo $item->title; ?></span>
          </a>
        </li> 
      <?php

    // end "if image_intro"
    endif;
  endforeach;
?>
于 2017-02-17T18:09:21.083 回答
0

要仅显示第一个项目图像,您可以执行如下操作。

<?php 
$first = true;//initially set true
foreach ($list as $item) : 

        $images = json_decode($item->images); 

        if($first==true): 

            if( $images->image_intro ) : ?>

                <img src="<?php echo $images->image_intro; ?>" alt="<?php echo htmlspecialchars($item->title); ?>" />

        <?php

            endif;

        endif;

        $first = false;

        ?>

<li itemscope itemtype="https://schema.org/Article">
    <a href="<?php echo $item->link; ?>" itemprop="url">
        <span itemprop="name">
            <?php echo $item->title; ?>
        </span>
    </a>
</li> 


<?php endforeach; ?>
于 2017-02-17T18:11:51.740 回答
0

与其修改 PHP,不如将一些 CSS 添加到自定义 CSS 文件中,如下所示:

ul.mostread img {display: none;}
ul.mostread img:first-of-type {display: block;}

以便只显示第一张图像。

有关如何在 Joomla 中创建自定义 CSS 文件的说明,请参阅https://joomla.stackexchange.com/a/3878/120 。

自定义 CSS 文件还具有不会被任何未来的 Joomla 或模板更新覆盖的优点。

于 2017-02-18T11:18:43.943 回答