专栏首页前端资源Z-BlogPHP 主题制作技巧,随机获得文章中的图片

Z-BlogPHP 主题制作技巧,随机获得文章中的图片

原链接:Z-BlogPHP 主题制作技巧 为Z-Blog官方文档,只是存档备用。

注意,本页内容为开发者提供的实现实例,请在理解代码后再使用。

同分类文章列表调用

{foreach GetList(调用条数,分类ID) as $related}
    <li><span>{$related.Time('Y-m-d')}</span><a href="{$related.Url}">{$related.Title}</a></li>
{/foreach}

获取大目录下的所有文章(包括子目录文章),将上面的GetList改为:

Getlist(调用条数,分类ID,null,null,null,null,array('has_subcate'=>true));

调用其它数据参考文章标签,文章标签。 注意:此处需要使用foreach循环中as后面变量名,如案列中使用的 $related ,如需调用标题则用 {$related.Title} ,而并非是 {$article.Title}

网站关键词、描述添加

{if $type=='article'}
  <title>{$title}_{$article.Category.Name}_{$name}</title>
  {php}
    $aryTags = array();
    foreach($article->Tags as $key){
      $aryTags[] = $key->Name;
    }
    if(count($aryTags)>0){
        $keywords = implode(',',$aryTags);
    } else {
        $keywords = $zbp->name;
    }
    $description = preg_replace('/[\r\n\s]+/', ' ', trim(SubStrUTF8(TransferHTML($article->Content,'[nohtml]'),135)).'...');
  {/php}
  <meta name="keywords" content="{$keywords}"/>
  <meta name="description" content="{$description}"/>
  <meta name="author" content="{$article.Author.StaticName}">
{elseif $type=='page'}
  <title>{$title}_{$name}_{$subname}</title>
  <meta name="keywords" content="{$title},{$name}"/>
  {php}
    $description = preg_replace('/[\r\n\s]+/', ' ', trim(SubStrUTF8(TransferHTML($article->Content,'[nohtml]'),135)).'...');
  {/php}
  <meta name="description" content="{$description}"/>
  <meta name="author" content="{$article.Author.StaticName}">  
{elseif $type=='index'}
  <title>{$name}{if $page>'1'}_第{$pagebar.PageNow}页{/if}_{$subname}</title>
  <meta name="Keywords" content="自定义关键词,{$name}">
  <meta name="description" content="自定义描述_{$name}_{$title}">
  <meta name="author" content="{$zbp.members[1].StaticName}">
{else}
  <title>{$title}_{$name}_第{$pagebar.PageNow}页</title>
  <meta name="Keywords" content="{$title},{$name}">
  <meta name="description" content="{$title}_{$name}_当前是第{$pagebar.PageNow}页"> 
  <meta name="author" content="{$zbp.members[1].StaticName}">
{/if}

评论数判断

{if $article.CommNums==0}
    暂无留言
{elseif $article.CommNums==1}
    仅有1条留言
{else}
    已有{$article.CommNums}条留言
{/if}

页面判断

{if $type=='index'&&$page=='1'}  /*判断首页*/
{if $type=='category'}  /*判断分类页*/
{if $type=='article'}  /*判断日志页,不含独立页面,{if $article.Type==ZC_POST_TYPE_ARTICLE}(另一方案)*/
{if $type=='page'}  /*判断独立页面*/
{if $type=='author'}  /*判断用户页*/
{if $type=='date'}  /*判断日期页*/
{if $type=='tag'}  /*判断标签页*/

示例:首页和分类列表页分离

在 index.php 文件里作判断,分离模板。比如:

{if $type=='index'&&$page=='1'} 
{template:c_index}
{else}
{template:c_list}
{/if}

然后新建两个相应的模板文件:c_index.php 和 c_list.php

随机获得文章中的四张图片中的一张

适用于多图站点,在模板文件中使用:

{php}
$temp=mt_rand(1,4);
$pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg|\.png]))[\'|\"].*?[\/]?>/";
$content = $article->Content;
preg_match_all($pattern,$content,$matchContent);
if(isset($matchContent[1][0])) 
    $temp=$matchContent[1][0];
else
    $temp=$zbp->host."zb_users/theme/$theme/style/images/random/$temp.jpg";
    //需要在相应位置放置4张jpg的文件,名称为1,2,3,4
{/php}
 
<img src="{$temp}" />

仅显示文字的文章简介调用方法

{SubStrUTF8(TransferHTML($article.Intro,"[nohtml]"),200)}

分类目录面包屑的代码编写

{php}
$html='';
function navcate($id){
        global $html;
        $cate = new Category;
        $cate->LoadInfoByID($id);
        $html ='>>  <a href="' .$cate->Url.'" title="查看' .$cate->Name. '中的全部文章">' .$cate->Name. '</a> '.$html;
        if(($cate->ParentID)>0){navcate($cate->ParentID);}
}
navcate($article->Category->ID);
global $html;
echo $html;
{/php}

显示文章的相关文章

方法一和方法二的区别:方法一是通过匹配tags,然后按照更新时间列出相关文章;方法二,同样通过匹配tags,然后随机列出相关,但随机比较消耗资源,并且不支持SQLite数据库。

方法1

使用getlist,请参考GetList 函数 例5

友好的时间显示

function TimeAgo( $ptime ) {
    $ptime = strtotime($ptime);
    $etime = time() - $ptime;
    if($etime < 1) return '刚刚';
    $interval = array (
        12 * 30 * 24 * 60 * 60  =>  '年前 ('.date('Y-m-d', $ptime).')',
        30 * 24 * 60 * 60       =>  '个月前 ('.date('m-d', $ptime).')',
        7 * 24 * 60 * 60        =>  '周前 ('.date('m-d', $ptime).')',
        24 * 60 * 60            =>  '天前',
        60 * 60                 =>  '小时前',
        60                      =>  '分钟前',
        1                       =>  '秒前'
    );
    foreach ($interval as $secs => $str) {
        $d = $etime / $secs;
        if ($d >= 1) {
            $r = round($d);
            return $r . $str;
        }
    };
}

友好时间在编译模板文件中使用方法 {TimeAgo($XXX.Time())} 例:{TimeAgo($article.Time())}

判断是否为手机端

function APPID_is_mobile() {
	if ( empty($_SERVER['HTTP_USER_AGENT']) ) {
		$is_mobile = false;
	} elseif ( strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false // many mobile devices (all iPhone, iPad, etc.)
		|| strpos($_SERVER['HTTP_USER_AGENT'], 'Android') !== false
		|| strpos($_SERVER['HTTP_USER_AGENT'], 'Silk/') !== false
		|| strpos($_SERVER['HTTP_USER_AGENT'], 'Kindle') !== false
		|| strpos($_SERVER['HTTP_USER_AGENT'], 'BlackBerry') !== false
		|| strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mini') !== false
		|| strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mobi') !== false ) {
			$is_mobile = true;
	} else {
		$is_mobile = false;
	}
 
	return $is_mobile;
}

将以上函数保存到主题 include.php 在模板文件中使用方法

{if APPID_is_mobile()}
    手机端代码
{else}
    PC端代码
{/if}

自动给IMG添加alt属性

搜索引擎对网站图片SEO的友好性很大取决于alt属性,使用此函数可以自动为img添加alt属性为文章标题! 首先在 include.php 加入此函数:

function APPID_imgalt(&$template){
	global $zbp;
	$article = $template->GetTags('article');
	$pattern = "/<img(.*?)src=('|\")([^>]*).(bmp|gif|jpeg|jpg|png|swf)('|\")(.*?)>/i";
	$replacement = '<img alt="'.$article->Title.'" src=$2$3.$4$5/>';
	$content = preg_replace($pattern, $replacement, $article->Content);
	$article->Content = $content;
	$template->SetTags('article', $article);
}

然后挂载如下接口:

Add_Filter_Plugin('Filter_Plugin_ViewPost_Template','APPID_imgalt');

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Z-Blog PHP百度熊掌号搜索结果出图页面改造

    熊掌号为优质图文内容生产者提供结搜索结果出图权益,帮助站点获取更好的搜索结果展现样式,为搜索用户提供更好的浏览体验。

    德顺
  • WebStorm新建Git分支后无法删除的原因及解决方法

    最后找到问题所在,在编辑器右下角的 Git 选择 master 然后 Checkout 检出一下就可以了。

    德顺
  • 移动端手机web前端meta通用设置

    德顺
  • Spark+Zookeeper搭建高可用Spark集群

    目前Apache Spark支持三种分布式部署方式,分别是standalone、spark on mesos和 spark on YARN,详情参考。

    阿dai学长
  • 领域驱动设计,让程序员心中有码(二)

    领域驱动设计,近年来受到技术圈的广泛追捧,主要得益于微服务技术的发展。一千个读者有一千个哈姆雷特,而不同的人往往对这种理论有不同的看法。如果问一个.net开发者...

    歪脖贰点零
  • 一种解决启动进程传递参数过长的方法

            工作中,QA同学在测试我们程序的时候,发现在XP下,我们的A进程无法启动我们的B进程。而在Win7 64bit系统下功能正常。RD同学调试后,发...

    方亮
  • 增加VirtualBox虚拟机的磁盘空间大小(Host:Win7 VirtualBox5.0.16 VM:Win10)

    我思故我在
  • 一口(很长的)气掌握mongodb基本操作nosql介绍安装mongodb库操作集合操作文档操作数据类型查询进阶聚合索引用户权限管理

    nosql,全称是 not only sql, 即“不仅于sql”,相较于关系型数据库,nosql更加灵活,无需去维护复杂的数据关系。数据是json格式,更加直...

    章鱼喵
  • scala-sparkML学习笔记:xgboost进行分布式训练

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    MachineLP
  • Dubbo原理何源码解析之服务暴露

    从文章《Dubbo原理和源码解析之标签解析》中我们知道,<dubbo:service> 标签会被解析成 ServiceBean。

    烂猪皮

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动