我正在使用这样的substr()函数:
<a href="#">link</a>
<?php echo substr($item->introtext,0,75);?>
<a href="#">read-more</a>
当introtext超过75个字符时,它显示不正确:
<a href="#">link</a>
<p>introtext paragraphs here<a href="#">read-more</a></p>
但是当introtext少于75个字符时,它正确地显示如下:
<a href="#">link</a>
<p>introtext paragraphs here</p>
<a href="#">read-more</a>
请注意,当introtext超过75个字符时,read-more在p内,但在少于75个字符时则不在。
我的整个代码在这里:
<ul class="latestnews<?php echo $moduleclass_sfx; ?>">
<h3>news</h3>
<?php foreach ($list as $item) : ?>
<li>
<a href="<?php echo 'index.php?option=com_content&view=article&id='.$item->id; /* echo $item->link;*/ ?>">
<?php echo $item->title; ?></a>
<?php echo substr($item->introtext,0,75);?>
<br /><a class="learn-more" href="<?php echo 'index.php?option=com_content&view=article&id='.$item->id; //* echo $item->link;*/ ?>">learn more</a>
</li>
<?php endforeach; ?>
</ul>
答案 0 :(得分:1)
当$item->introtext
少于75个字符时,结束标记</p>
肯定在75个字符内,因此结构将是 -
<p>paragraph content</p>
<a href="#">read-more</a>
但是当$item->introtext
超过75个字符时,</p>
- 函数返回的字符串中的结束标记substr()
肯定不存在。因此结果如下 -
<p>paragraph content<a href="#">read-more</a>
//As closing tag </p> is not there hence the link "read-more" is considered inside the <p>..</p> scope.
<?php echo substr($item->introtext,0,75);?>
导致问题。
所以你可以做一件事,即剥去文本中的所有标签,以便substr()
不计算标签和样式声明并申请之后所有必要的风格。所以将代码更改为 -
<?php echo substr(strip_tags($item->introtext),0,75);?>
答案 1 :(得分:0)
问题在于<p>
标签似乎实际上在内部文字中。
因此,要解决此问题,您需要从字符串末尾修剪结束标记。
<ul class="latestnews<?php echo $moduleclass_sfx; ?>">
<h3>news</h3>
<?php foreach ($list as $item) : ?>
<li>
<a href="<?php echo 'index.php?option=com_content&view=article&id='.$item->id; /* echo $item->link;*/ ?>">
<?php echo $item->title; ?></a>
<?php echo substr(rtrim($item->introtext,"</p>"),0,75);?>
<br /><a class="learn-more" href="<?php echo 'index.php?option=com_content&view=article&id='.$item->id; //* echo $item->link;*/ ?>">learn more</a>
</p>
</li>
<?php endforeach; ?>
</ul>
以上代码将移除结束</p>
代码,并在了解更多链接结束后创建另一个代码。
答案 2 :(得分:0)
Joomla具有内置函数,用于智能修剪诸如介绍文本之类的内容:JHtmlString :: truncate(),JHtmlString :: truncateComplex(),JHtmlString :: abridge()。我会使用truncateComplex,因为你可能需要渲染75个字符,但不要将html计算为字符。