【Ver 0.9】文章分类或ID随意调用并且可控制自动取内容第一张图做为展示!

2016-07-07 14:55 来源:www.chinab4c.com 作者:ecshop专家



注意:本功能函数已经更新到最新了~~看到本贴的新老朋友请去这里
http://bbs.ecshop.com/thread-91717-1-1.html



这里有最新的:自动判断IP显示地区的天气预报EC插件。具体可以参看:
http://bbs.ecshop.com/thread-90606-1-1.html

大家好~又是我!之前已经发布过文章随意调用的功能。具体可以参看:http://bbs.ecshop.com/thread-89377-1-1.html

但第一次发布的功能的不能抽取内容里面的图片,现在将文章随意调用一起整合抽内容图功能发布(就像一般的CMS那样左图右列表)。希望大家多多支持,并提提意见!
这里是功能截图:


实际效果可以参看:http://shop.17kaixin8.com/

首先还是那句话:因为本人特别害怕ECSHOP的版本升级,所以一般有代码级的改动时我都不愿意太多的去改EC的原文件。但这次的功能我为了通用性和方便性还是要改动一下原文件了。

(1)找到 网店根目录/includes/lib_article.php文件,并在最尾处增加以下代码(大概在行83处):

  1. function GetImageSrc($body) {
  2. if( !isset($body) ) {
  3. return '';
  4. }
  5. else {
  6. preg_match_all ("/<(img|IMG)(.*)(src|SRC)=[\"|'|]{0,}([h|\/].*(jpg|JPG|gif|GIF|png|PNG))[\"|'|\s]{0,}/isU",$body,$out);
  7. return $out[4];
  8. }
  9. }
  10. /**
  11. * 按文章ID号或文章分类ID号取得文章
  12. * @paramarray $id 文章ID或文章分类ID
  13. * @paramstring$getwhat以何种方式取文章.当参数为'cat'时以文章分类ID取,其他都以文章ID取
  14. * @paraminteger$num控制显示多少条文章.当参数为0时则全部显示
  15. * @paramboolean$isrand是否随机显示文章.
  16. */
  17. function get_article_new( $id = array(0), $getwhat = '', $num = 0, $isrand = false ) {
  18. $wherestr = '';
  19. $search = '';

  20. if( $getwhat =='cat' ){
  21. $search = 'cat_id=';
  22. }
  23. else {
  24. $search = 'article_id=';
  25. }

  26. for( $i=0; $i<count($id); $i++ ) {
  27. if( $i<count($id)-1 ) {
  28. $wherestr = $wherestr . $search . $id[$i] . ' or ';
  29. }
  30. else {
  31. $wherestr = $wherestr . $search . $id[$i];
  32. }
  33. }

  34. $sql = 'SELECT * FROM ' . $GLOBALS['ecs']->table('article') .
  35. ' WHERE (' . $wherestr . ') AND (is_open = 1) ';

  36. if ( $isrand == true ) {
  37. $sql .= ' ORDER BY rand()';
  38. }
  39. else {
  40. $sql .= ' ORDER BY add_time DESC, article_type DESC, article_id DESC';
  41. }

  42. if ( $num > 0 ) {
  43. $sql .= ' LIMIT ' . $num;
  44. }
  45. $res = $GLOBALS['db']->getAll($sql);
  46. $articles = array();
  47. foreach ($res AS $id => $row) {
  48. $articles[$id]['title']= $row['title'];
  49. $articles[$id]['url']= 'article.php?id=' . $row['article_id'];
  50. $articles[$id]['addtime'] = date($GLOBALS['_CFG']['date_format'], $row['add_time']);
  51. $articles[$id]['content'] = $row['content'];
  52. $imgsrc = GetImageSrc($row['content']);
  53. $articles[$id]['img']= $imgsrc[0];
  54. }

  55. return $articles;
  56. }
复制代码

回答:


(2)在模板目录的库文件目录中增加:msg_img.lbi库文件
代码如下:

  1. <?php
  2. $this->assign( 'img_art1', get_article_new(array(2),'cat',6) );
  3. ?>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <style type="text/css">
  6. <!--
  7. .img_art{ width:273px; height:130px; border:#FFF solid 1px; float:left; padding-bottom:10px; overflow:hidden; }
  8. .title { background-color:#D3C08D; height:22px; color:#765935; padding:5px 5px 0px 5px; font-weight:bold;}
  9. .content { padding:5px;}
  10. .Limg {width:100px; height:100px; border:#E0E0E0 solid 1px; padding:1px; text-align:center; margin-right:2px; float:left;}
  11. .Limg img {width:100px; height:100px; border:0px; }
  12. .rcont { width:155px; float:left;}
  13. .rcont li {padding-left: 2em;line-height: 180%;background-image: url(images/news_arrow.gif);background-repeat: no-repeat;background-position: 12px 5px;white-space:nowrap;width:150px;text-overflow:ellipsis;overflow:hidden;}
  14. .rcont a:visited, .rcont a:link {color: #9A6F4A;text-decoration: underline;}
  15. .rcont a:hover {color: #9A6F4A;text-decoration: underline;}
  16. }
  17. -->
  18. </style>
  19. <div class="img_art">
  20. <div class="title">公司新闻</div>
  21. <div class="content">
  22. <!-- {if $img_art1} -->
  23. <!--{foreach from=$img_art1 item=aimg1 name="artimg1"}-->
  24. {if $smarty.foreach.artimg1.index eq 1 }
  25. <div class="Limg">
  26. <a href="{$aimg1.url}" target="_blank"><img src="{$aimg1.img}" alt="{$aimg1.title|escape:html}" /></a>
  27. </div>
  28. {/if}
  29. <!--{/foreach}-->
  30. <div class="rcont">
  31. <ul>
  32. <!--{foreach from=$img_art1 item=ali1 name="artli1"}-->
  33. {if $smarty.foreach.artli1.index neq 1 }
  34. <li><a href="{$ali1.url}" title="{$ali1.title|escape:html}" target="_blank">{$ali1.title|truncate:16:"..."}</a></li>
  35. {/if}
  36. <!--{/foreach}-->
  37. </ul>
  38. </div>
  39. <!-- {else} -->
  40. 暂无文章
  41. <!-- {/if} -->
  42. </div>
  43. </div>
复制代码

过程一是程序的主体功能,过程二是模板显示时候的样式表现。
下面讲解一下过程二里面的重要一点的代码:
  1. $this->assign( 'img_art1', get_article_new(array(2),'cat',6) );
复制代码
这里是调用程序的get_article_new()函数,参数意思是取文章分类ID号为2,并且取6篇.当然本函数还支持随机显示文章。但这里要注意EC是有缓存机制的,可能在选择了随机的时候没有发现文章有变化,但当重新打开浏览器或过了缓存时间后重新刷新浏览器文章显示就有变化了。

过程二,行25代码
  1. {if $smarty.foreach.artimg1.index eq 1 }
复制代码
,这里控制的是显示偱环中的文章图片第一条文章。如果想左边显示两张图片,则可以适当改动要显示的条件等。

过程二,行34代码
  1. {if $smarty.foreach.artli1.index neq 1 }
复制代码
,这里就是在显示文章列表时不重复已经显示过的图片。

其他基本上都是样式布局了。我是将CSS直接写进了库文件中,这样不用改动原来的STYTLE.css文件。

最后注明一下:本人美工是半桶水,库文件显示表现可能不太好只测试了IE7或FF3。如果哪位仁兄美工好,并且写了个相应的更好的视觉体现的库文件的话请共享一下啊!谢谢!

LZ,谢谢你的共享, 思路有了, 门就打开了,

留个位置,应该可以用到

也希望和大家一起多多交流

爱死你了,收藏一个

留个位置··会用上的

还不错感谢分享哦

不错
收藏了

不错,做个记号

不错不错,赞一个

收藏了留以后慢慢用

我也收藏一下!!