【问题标题】:Joomla intro image as read more linkJoomla 介绍图片作为阅读更多链接
【发布时间】:2012-03-08 08:58:41
【问题描述】:

我想让 joomla 文章介绍图像的行为类似于阅读更多内容和标题链接。所以用户点击图片,文章就会加载。

我不是 PHP 专家,但也许这是 readmore 链接代码:

<a href="<?php echo $this->item->readmore_link; ?>" class="button<?php echo $this->item->params->get('pageclass_sfx'); ?>">
        <?php if ($this->item->readmore_register) :
            echo JText::_('Register to read more...');
        elseif ($readmore = $this->item->params->get('readmore')) :
            echo $readmore;
        else :
                echo JText::_("Read Article");
        endif; ?></a>

这就是我想要对我的 joomla 网站上的每张介绍图片执行的操作。 谢谢!

【问题讨论】:

  • 什么介绍图片?您是否将图像放在阅读更多行上方的内容区域中?

标签: php joomla joomla1.5


【解决方案1】:

刚刚解决了!

你的思维方式帮助了我。谢谢!

这是我的代码:

        <a href="<?php echo JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid)); ?>">

    <?php
        $images = json_decode($item->images);
        if (isset($images->image_intro) and !empty($images->image_intro)) {
            $imgfloat = (empty($images->float_intro)) ? $params->get('float_intro') : $images->float_intro;
            $class = (htmlspecialchars($imgfloat) != 'none') ? ' class="size-auto align-'.htmlspecialchars($imgfloat).'"' : ' class="size-auto"';
            $title = ($images->image_intro_caption) ? ' title="'.htmlspecialchars($images->image_intro_caption).'"' : '';
            echo '<img'.$class.$title.' src="'.htmlspecialchars($images->image_intro).'" alt="'.htmlspecialchars($images->image_intro_alt).'" />';
        }

        echo $this->item->introtext;

    ?>

    </a>

【讨论】:

    【解决方案2】:

    对于 Joomla 2.5:

    在您的 _item.php 覆盖中(位置:yourtemplate\html\mod_articles_news\item.php) 放置以下行:

    <?php if ($params->get('image')) : ?>
        <?php  $images = json_decode($item->images); ?>
        <?php  if (isset($images->image_intro) and !empty($images->image_intro)) : ?>
            <a href="<?php echo $item->link;?>"><img src="<?php echo htmlspecialchars($images->image_intro); ?>" alt="<?php echo   htmlspecialchars($images->image_intro_alt); ?>"/></a>
        <?php endif; ?>
    <?php endif; ?>
    

    把它放在你希望它出现的地方 例如之后:

    <?php echo $item->beforeDisplayContent; ?>
    

    您的介绍图片现在已成为链接。 isset 部分,确保如果查看器使用 Internet Explorer,它不会显示一个小的红色十字框。

    仅供参考: 在 blog_item.php 中,您可以找到如何在文章中显示的示例代码。在这里您还可以找到 imagefloat 等的代码。

    <?php  if (isset($images->image_intro) and !empty($images->image_intro)) : ?>
    <?php $imgfloat = (empty($images->float_intro)) ? $params->get('float_intro') : $images->float_intro; ?>
    <div class="img-intro-<?php echo htmlspecialchars($imgfloat); ?>">
    <img
        <?php if ($images->image_intro_caption):
            echo 'class="caption"'.' title="' .htmlspecialchars($images->image_intro_caption) .'"';
        endif; ?>
        src="<?php echo htmlspecialchars($images->image_intro); ?>" alt="<?php echo htmlspecialchars($images->image_intro_alt); ?>"/>
    </div>
    <?php endif; ?>
    

    【讨论】:

      【解决方案3】:

      首先让我解释一下您在上面发布的代码的作用。整个代码块生成一个链接:有一堆 if 语句是根据一些设置确定的。例如,如果您设置了人们需要注册才能阅读更多内容,链接将显示“注册阅读更多内容...”

      但是,由于我们想将图像转换为链接,因此我们在这里感兴趣的部分是我们希望图像链接到的 URL。就在第一行:

      <a href="<?php echo $this->item->readmore_link; ?>"
      

      所以我们知道,由于$item-&gt;item-&gt;readmore_link,URL 是动态提供的,并且所有这些代码所做的只是将其回显到 HTML 中。

      剩下的就是编辑您拥有图像的页面的 Joomla 模板(可能与您从中获取此代码的文件相同)。看起来这应该是更大的 PHP 循环的一部分,该循环遍历所有帖子。在您找到此代码的上方某处,应该是该帖子附带的介绍图像的代码。

      我不确定它会是什么样子,它可能是&lt;img src="&lt;? stuff here; ?&gt; /&gt;,也可能是动态生成的。继续阅读。如果您仍然不确定最后在哪里可以找到它,请使用您从中获得上述截图的模板的完整代码编辑您的帖子。不管它长什么样子,在下面的步骤中都被称为&lt;WHATEVER IMAGE CODE YOU FOUND ABOVE&gt;

      您必须用“a”标签包装该图像,使其如下所示:

      <a href="<?php echo $this->item->readmore_link; ?>"> <WHATEVER IMAGE CODE YOU FOUND ABOVE> </a>
      

      应该这样做。如果您有任何问题,请告诉我,如果您能提供更详细的信息,我会非常乐意让我的帖子更具体,但我已经尽力解释得足够好,您应该能够用试了几次。

      【讨论】:

      • 您的想法不错,但标准 Joomla 文章中没有介绍图像代码。我们需要更多信息才能知道他从哪里获取图像。
      • 我没有 Joomla 背景,只有 PHP 的背景,但我想他可能正在使用模板或主题或允许他上传图像的东西。它可以通过帮助程序生成,也可以使用动态 URL 手动生成。我猜它很可能类似于&lt;img src=&lt;?php echo $this_articles_image_link; ?&gt; /&gt;,但无论哪种方式,我的解决方案都应该适合他。你说得对,唯一让这个问题变得困难的是他没有提供细节。
      • 我根据你的回答想通了。如果他使用扩展来允许文章图像,那么将有图像特定代码。如果他只是在文章摘要中放一张图片,那么需要一些正则表达式的魔法才能让它发挥作用。
      • 我不知道你在说什么 Joomla 从 2.5 开始就有一个标准的介绍图像。
      【解决方案4】:

      正如您所说,您不是 PHP 专家,听起来您最好的选择是使用与您想要的功能相似的 Joomla 扩展。

      我相信mod_minifrontpage 可以满足您的需求。它允许您显示文章列表,并根据要引用的第一张图片为这些文章生成缩略图。

      【讨论】:

        【解决方案5】:

        J 中有文章介绍图片,从 1.7.5 到现在最新的 2.5.3 您需要更改 component_content 的默认值,

        您可以通过 2 种方式进行操作,在 yourinstall/components/com_content/views/ 中编辑视图

        或使用模板覆盖,您首先需要知道您的模板是否使用覆盖,否则如果您在组件本身中编辑组件视图,您将看不到更改。

        要验证这一点,请转到 site_name/templates/template_name/html 文件夹并检查是否有文件夹名称 com_content ,

        如果是这种情况,那么您的模板正在使用覆盖,并且任何编辑都应该通过那里完成,而不是通过组件

        现在到实际代码

        这是在 components\com_content\views\featured\tmpl\default_item.php(这是我默认的首页文章视图)

        <?php  if (isset($images->image_intro) and !empty($images->image_intro)) : ?>
            <?php $imgfloat = (empty($images->float_intro)) ? $params->get('float_intro') : $images->float_intro; ?>
        
            <div class="img-intro-<?php echo htmlspecialchars($imgfloat); ?>">
            <img
                <?php if ($images->image_intro_caption):
                    echo 'class="caption"'.' title="' .htmlspecialchars($images->image_intro_caption) .'"';
                endif; ?>
                src="<?php echo htmlspecialchars($images->image_intro); ?>" alt="<?php echo htmlspecialchars($images->image_intro_alt); ?>"/>
            </div>
        <?php endif; ?>
        

        你需要做的就是用像这样的 readmore 链接在 IMG 标签周围包裹一个元素

        <a href="<?php echo $this->item->readmore_link; ?>">
        
        <img
                <?php if ($images->image_intro_caption):
                    echo 'class="caption"'.' title="' .htmlspecialchars($images->image_intro_caption) .'"';
                endif; ?>
                src="<?php echo htmlspecialchars($images->image_intro); ?>" alt="<?php echo htmlspecialchars($images->image_intro_alt); ?>"/>
        
        
        
        </a>
        

        不要忘记,如果 com_content 有模板覆盖,您将需要编辑其中的特色/default_item.php

        【讨论】:

          【解决方案6】:

          在 Joomla 3.1 中,intro_image 布局已移至 layouts/joomla/content 文件夹。在我的情况下,它是从 com_content/views/category/tmpl/blog_item.php 调用的,如下所示:

          <?php echo JLayoutHelper::render('joomla.content.intro_image', $this->item); ?>
          

          我将该文件移动到我的模板/html/com_content/category/blog_item.php,然后像这样包装对 JLayoutHelper 的调用:

          <?php $link = JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid)); ?>
          <a href="<?php echo $link; ?>">
          <?php echo JLayoutHelper::render('joomla.content.intro_image', $this->item); ?>
          </a>
          

          【讨论】:

            【解决方案7】:

            如果您在 Joomla 3.1 上安装了 Gantry,则覆盖位于不同的位置。您将需要导航到 plugins/system/gantry/overrides/3.0/2.5/com_content/category/blog_item.php 并使用阅读更多链接代码包装介绍图像。

                <?php $link = JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid)); ?>
            <a href="<?php echo $link; ?>"><img
                    <?php if ($images->image_intro_caption):
                        echo 'class="caption"'.' title="' .htmlspecialchars($images->image_intro_caption) .'"';
                    endif; ?>
                    src="<?php echo htmlspecialchars($images->image_intro); ?>" alt="<?php echo htmlspecialchars($images->image_intro_alt); ?>"/></a>
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-03-25
              • 1970-01-01
              • 2015-12-17
              • 1970-01-01
              • 2014-09-11
              相关资源
              最近更新 更多