Joomla简介图片作为“阅读更多”链接

6
我希望您能够点击文章简介图片时,就像阅读更多和标题链接一样的功能。因此,当用户点击图片时,文章会加载。
我不是PHP专家,但也许这是阅读更多链接代码:
<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网站上对每个介绍图片做的事情。谢谢!


1
什么是介绍图片?您是否将图像放置在“阅读更多”行上方的内容区域中? - Brent Friar
7个回答

6

已解决!

你的思路帮了我很大忙,谢谢!

以下是我的代码:

        <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; ?>

1

J 中有文章介绍图片,自 1.7.5 版本以来,现在最新版本为 2.5.3。 你需要改变 component_content 的默认设置。

你可以通过两种方式实现,编辑你的安装路径下的 views 文件夹:

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

要验证这一点,请转到站点名称/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; ?>

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

<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的模板覆盖,您需要编辑其中的featured/default_item.php文件


1
所以让我先解释一下你上面发布的代码是做什么的。整个代码块生成一个链接:有一堆if语句是基于某些设置来确定的。例如,如果您设置了需要注册才能阅读更多内容,链接将显示“注册以阅读更多...”
然而,我们在这里感兴趣的部分,因为我们想把图像转换成链接,是我们希望图像链接到的URL。这就在第一行中:
<a href="<?php echo $this->item->readmore_link; ?>"

所以我们知道URL是通过$item->item->readmore_link动态提供的,所有这段代码所做的就是将其回显到HTML中。

剩下的就是编辑您在其中放置图像的页面的Joomla模板(可能是您从中获取此代码的同一文件)。看起来这应该是一个更大的PHP循环的一部分,它循环遍历所有帖子。在您找到此代码的位置上方的某个地方,应该有用于与该帖子配套的简介图像的代码。

我不确定它会是什么样子,它可能是一个<img src="<? stuff here; ?> />或者它可能是动态生成的。继续阅读。如果您仍然不确定在最后要在哪里找到它,请使用包含上述代码片段的模板的完整代码编辑您的帖子。无论它看起来像什么,它都被称为以下步骤中的<WHATEVER IMAGE CODE YOU FOUND ABOVE>

您必须使用“a”标签将该图像包装起来,使其看起来像以下内容:

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

应该就是这样了。如果您遇到任何问题,请告诉我,我很乐意让我的帖子更加具体,如果您能提供更详细的信息,但我已经尽力解释得足够清楚,您应该可以在几次尝试中弄明白它。


你的想法很好,但是在标准的Joomla文章中没有引入图像代码。我们需要更多信息才能知道他从哪里获取图像。 - Brent Friar
我没有Joomla的背景,只有PHP的背景,但我猜他可能在使用一个模板或主题,或者其他允许他上传图片的东西。这个图片要么是通过一个辅助工具生成的,要么是手动使用动态URL上传的。我猜最有可能的情况是类似于<img src=<?php echo $this_articles_image_link; ?> />这样的代码,但无论如何,我的解决方案应该适用于他。你说得对,唯一让这个问题变得困难的就是他没有提供详细信息。 - swiecki
我从你的回答中得出结论。如果他正在使用扩展来允许文章图片,那么将会有特定于图像的代码。如果他只是在文章摘要中放置一张图片,那么需要一些正则表达式技巧才能使其工作。 - Brent Friar
自从2.5版本以来,Joomla就有一个标准的介绍图片,我不知道你在说什么。 - Elin

1

根据你所说,你不是一个PHP专家,那么最好的选择似乎是使用一个Joomla扩展程序,该扩展程序具有类似于你所需功能的功能。

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


1
在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); ?>

我将该文件移动到我的template/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>

0
如果您在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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接