`

Thinkphp二级网站地图XML生成的方法[图解]

阅读更多
在admin项目的Tpl目录下default目录里的SiteMap_index.html文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="../Public/js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" charset="utf-8" src="__PUBLIC__/js/artDialog/artDialog.min.js"></script>
<title>网站地图生成XML</title>
</head>
<body>
<script language="javascript">
function clicktodosome(type){
if(!window.confirm('确定要生成网站地图吗?')){
  return; 
}
var testDialog;
testDialog = art.dialog({
  lock: false,
  title:'',
  id:'loaddialog',
  content:'<font color="#ff0000">正在生成网站地图中...</font>',
  width:220
});
//url="{:U('indexrightlist')}";
switch(type){
  case 1:
   var url="{:U('buildingXML')}"; 
   break;
  case 2:
   var url="{:U('newsXML')}";
   break;
}

$.get(url,null,function(data){
  //$("#con").append(data);
  testDialog.close();
  $("#con").html(data);
});
}
function showpage(url){
var testDialog;
testDialog = art.dialog({
  lock: false,
  title:'',
  id:'loaddialog',
  content:'<font color="#ff0000">正在加载中...</font>',
  width:220
});
$.get(url,null,function(data){
  //$("#con").append(data);
  testDialog.close();
  $("#con").html(data);
});
}
</script>
<style type="text/css">
#con ul li{ line-height:22px;}
.d_page { padding-top:10px;}
</style>
<div class="right_box">
  <div class="dqwz">
    <div class="left l17"><strong class="f14">网站地图管理</strong><span class="all366C padl_13">&nbsp;</span></div>
    <div class="right all366C"></div>
  </div>
  <dl class="qbright w_100">
    <dd style="border:none;">
      <li style="font-size:15px;"><strong>生成<span style="color:#F00;">楼盘</span>网站地图:</strong>  <input name="save" type="submit" class="agin tj cur" value="生 成" onClick="clicktodosome(1)"/></li>
    </dd>
  </dl>
  
  
  <dl class="qbright w_100">
    <dd style="border:none;">
      <li style="font-size:15px;"><strong>生成<span style="color:#F00;">资讯</span>网站地图:</strong>  <input name="save" type="submit" class="agin tj cur" value="生 成" onClick="clicktodosome(2)"/></li>
    </dd>
  </dl>
  
    <div id="con"></div>
  <div class="clear"></div>
</div>
<br><br>
</body>
</html>



在admin项目的Action目录下SiteMapAction.class.php文件:

<?php

/**
* @author xiaohu
* @copyright 2010
*/

class SiteMapAction extends AdminAction {
public $page = '';

    public function _initialize() {
  include(BASE_PATH."Public/Lang/".C("DEFAULT_LANG")."/citys.php"); //获取城市的数组
  $this->assign("cityArr", $cityArr);
    }

//生成楼盘地图
public function buildingXML(){
  include(BASE_PATH."Public/Lang/".C("DEFAULT_LANG")."/citys.php"); //获取城市的数组
  $fnArr = createXML('building');
  //分页 
  $fnArr = $this->array_page($fnArr);
  $html = '<ul>';
  foreach($fnArr as $key=>$val){
   if($key == 0){
    $html .= '<li>生成<font color="#FF0000">全站</font>楼盘总地图成功:<a href="'.WWWURL.'/'.$val.'" target="_blank">'.WWWURL.'/'.$val.'</a></li>';
   }else{
    $city = preg_replace('/[^0-9]/i','',$val);
    $html .= '<li>生成<font color="#FF0000">'.$cityArr[$city].'</font>楼盘地图成功:<a href="'.WWWURL.'/'.$val.'" target="_blank">'.WWWURL.'/'.$val.'</a></li>';
   }
  }
  $html .= '</ul><div class="d_page">'.$this->page.'</div>';
  exit($html);
}

//生成资讯地图
public function newsXML(){
  $categoryArr = $this->categoryArr();
  $fnArr = createXML('news');
  //分页 
  $fnArr = $this->array_page($fnArr);
  $html = '<ul>';
  foreach($fnArr as $key=>$val){
   if($key == 0){
    $html .= '<li>生成<font color="#FF0000">全站</font>资讯总地图成功:<a href="'.WWWURL.'/'.$val.'" target="_blank">'.WWWURL.'/'.$val.'</a></li>';
   }else{
    $categoryId = preg_replace('/[^0-9]/i','',$val);
    $html .= '<li>生成<font color="#FF0000">'.$categoryArr[$categoryId].'</font>资讯地图成功:<a href="'.WWWURL.'/'.$val.'" target="_blank">'.WWWURL.'/'.$val.'</a></li>';
   }
  }
  $html .= '</ul><div class="d_page">'.$this->page.'</div>';
  exit($html);
}

function categoryArr(){
  //一级分类
  $categoryM=M("NewsCategory");
  $categoryIdList=$categoryM->field("id,title")->where("level=1")->select();
  foreach($categoryIdList as $key=>$val) {
   $NewsCategoryArr[$val['id']] = $val['title']; 
  } 
  return $NewsCategoryArr; 
}

//数组分页
/**
* array  $array 数组
* integer $showCount 每页的记录数
*------------------------------
* return array 返回数组
*/
function array_page($array,$listRows = 12,$showCount = 4){
  $p = C('VAR_PAGE');
  $url  =  $_SERVER['REQUEST_URI']."/".$p."/";
  $page  = !empty($_GET[C('VAR_PAGE')])?$_GET[C('VAR_PAGE')]:1;
        $upRow   = $page-1;
        $downRow = $page+1;  
  $linkPage = "";
  $totalPage = (int)count($array);
  $pagetotal = ceil($totalPage/$listRows); //总页数
  if($page <= ceil(($showCount)/2)){
   $minpg = 1;
   $maxpg = $showCount+1;
   if($maxpg >= $pagetotal) $maxpg = $pagetotal + 1;
  }elseif($page > ceil(($showCount)/2) && $page < ($pagetotal - ceil($showCount/2))){
   $minpg = $page - ceil(($showCount)/2) + 1;
   $maxpg = $page + ceil(($showCount)/2) + 1;
   if($maxpg >= $pagetotal) $maxpg = $pagetotal;
  }elseif($page >=$pagetotal - ceil(($showCount)/2)){
   $minpg = $pagetotal - ($showCount-1);
   if($minpg == 1) $minpg = 2;
   $maxpg = $pagetotal + 1;
  }  
  
  $linkPage .= " ".$totalPage." 条记录 ".$page."/".$pagetotal." 页 ";
  
  if($pagetotal == 1){
   $linkPage .= "&nbsp;<span class='current'>1</span>&nbsp;";
  }else{
   if($page > 1){
    $linkPage .= "&nbsp;&nbsp;<a href='javascript:void(0)' onClick=\"showpage('".$url."1');\">第一页</a>";
    $linkPage .= "&nbsp;&nbsp;<a href='javascript:void(0)' onClick=\"showpage('".$url.$upRow."');\">上一页</a>";
   }
   for($i = $minpg; $i < $maxpg; $i++){
    if($page == $i){
     $linkPage .= "&nbsp;&nbsp;<span class='current'><font color=\"#FF0000\">". $i ."</font></span>";
    }else{
     $linkPage .= "&nbsp;&nbsp;<a href='javascript:void(0)' onClick=\"showpage('".$url.$i."');\">$i</a>";
    }
   }
   if($page < $pagetotal){
    $linkPage .= "&nbsp;&nbsp;<a href='javascript:void(0)' onClick=\"showpage('".$url.$downRow."');\">下一页</a>";
    $linkPage .= "&nbsp;&nbsp;<a href='javascript:void(0)' onClick=\"showpage('".$url.$pagetotal."');\">最后一页</a>";
   }
  }   
  
  if($listRows < $totalPage) {
   if($page <= 1 || empty($page)) {
    $page = 0;
   } else {
    $page = intval($page) - 1;
   }
   $array = array_slice($array,$page*$listRows,$listRows,true);
  }
  $this->page = $linkPage;
  if(1 == $pagetotal) $this->page = '';
  return $array;  
}
}
?>



在admin项目的Common目录下common.php文件:

/**
*   生成xml文件
* string $fn 要生成的文件名(包括扩展名)
* string $type 标识是楼盘还是资讯等其他的
*            building  --  楼盘
*            news      --  新闻资讯
*   $integer $isFlag 是否全部生成
*   $integer $category  分类或城市的ID
*/
function createXML($type,$isFlag=1,$category=0){
if($type == 'building'){  //楼盘
  $model = M('BuildingBase');
  $list = $model->field('city as Numbers')->where('status >= 5')->order('city asc')->group('city')->findAll();
  $url = WWWURL;
}else if($type == 'news'){  //资讯
  $model = M('News');
  $list = $model->field('categoryId as Numbers')->where('status >= 5')->order('categoryId asc')->group('categoryId')->findAll();
  $url = WWWURL;
}
$fn = 'sitemap.xml';
$fp = "./xml/";
//生成一级全部
$isExist = searchFile($fp,$fn);
if($isExist == 'no'){ //没找到sitemap.xml文件
  modeXMl($list,$url,$type,$isExist,$fp,$fn);
}else if($isExist == 'yes'){ //找到sitemap.xml文件且只修改相应的部分
  $doc = new DOMDocument();
  $doc->load( './xml/'.$fn );
  $root = $doc -> documentElement;
  $books = $doc->getElementsByTagName( "sitemap" );
  if($isFlag == 1){
   $count_book = $books->length;
   for($i = 0; $i < $count_book; $i++){
    if($books->item(0)->getAttribute('name') == $type){
     $book = $books->item(0);
     $root->removeChild($book);
    }
   }
   $doc->save('./xml/'.$fn);
   modeXMl($list,$url,$type,$isExist,$fp,$fn);
  }else if($isFlag == 0){
   foreach( $books as $book ){
    if($book->getAttribute('id') == $category && $book->getAttribute('name') == $type){
     $book->getElementsByTagName( "lastmod" )->item(0)->nodeValue=date('Y-m-d',time());
    }
   }
   $doc->save('./xml/'.$fn);
  }
}

$fnArr = array();
$fnArr[0] = $fn;
//生成二级xml
if($isFlag == 1){  //生成二级全部
  foreach($list as $key=>$val){
   $fnArr[$key+1] = createSubXML($model,$val['Numbers'],$type,$fp);
  }
}else if($isFlag == 0){ //生成二级的单个
  $fnArr[0] = createSubXML($model,$category,$type,$fp);
  return;
}
return $fnArr;
}

/**
*   生成分类xml
*   string $model 数据库模型
*   integer $category 分类或城市的ID
* string $type 标识是楼盘还是资讯等其他的
*            building  --  楼盘
*            news      --  新闻资讯
*/
function createSubXML($model,$category,$type,$fp){
$fn = '';
if($type == 'building'){  //楼盘
  $subList = $model->field('id as Numbers')->where('status >= 5 and city='.$category)->order('id desc')->findAll();
  $url = WWWURL . "/building/";
  $extension = '';
}else if($type == 'news'){  //资讯
  $subList = $model->field('id as Numbers')->where('status >= 5 and categoryId='.$category)->order('id desc')->findAll();
  $url = NEWSURL . "/article/";
  $extension = '.html';
}
$fn = $type.$category.".xml";
modeSubXMl($subList,$url,$type,$extension,$fp,$fn);
return $fn;
}

/**
*   创建文件夹
* string $path 文件路径(不包括文件名)
*/
function _mkdirm($path)
{
if (!file_exists($path))
{
  _mkdirm(dirname($path));
  mkdir($path, 0777);
}
}

/**
*   写入文件
* string $fp 文件路径(不包括文件名)
*   string $fn 文件名(包括扩展名)
*   string $content 写入的内容
*/
function writeFile($fp,$fn,$content){
if(!empty($fp)) _mkdirm($fp);
$fp .= $fn;
$fpen = fopen($fp, "w");
fwrite($fpen, $content);
fclose($fpen); 
}

//检查上传文件的目录里是否已存在同名的上传文件
function searchFile($path,$file){
$file_array=array(); //存放文件名数组
$folder_array=array(); //存放目录名数组
$all_array=array(); //存放全部路径的数组

if(is_dir($path)){  //检查文件目录是否存在
  $H = @ opendir($path);
  while(false !== ($_file=readdir($H))){
   //检索目录
   if(is_dir($path."/".$_file) && $_file != "." && $_file!=".." && $_file!=="Thumbs.db"){
    if(eregi('/'.$file,'/'.$_file)){
     array_push($folder_array,$path."/".$_file);
    }
    searchFile($path."/".$_file,$file);
   //检索文件
   }elseif(is_file($path."/".$_file) && $_file!="." && $_file!=".." && $_file!=="Thumbs.db"){
    //$_file = auto_charset($_file,'utf-8','gbk');
    if(eregi('/'.$file,'/'.$_file)){
     array_push($file_array,$path."/".$_file);
     return 'yes'; //文件存在
    }
   }
  }
  //$this->all_array["folder"]=$this->folder_array;
  //$this->all_array["file"]=$this->file_array;
  closedir($H);
  return 'no'; //不存在
}elseif(is_file($path)){
  if(eregi($file,$path)){
   //$this->all_array["file"]=$path;
   return 'yes'; //文件存在
  } else {
   return 'no'; //文件不存在
  }
}else{
  return 'no'; //文件不存在
}
}


/**
*   xml第一级模板生成
* array $array 需要生成的数组
*   string $url 生成后里面的url链接
* string $type 标识是楼盘还是资讯等其他的
*            building  --  楼盘
*            news      --  新闻资讯
*   string $fp  文件路径(不包括文件名)
*   string $fn  文件名称(包括扩展名).
*/
function modeXMl($array,$url,$type,$isExist,$fp = './xml/',$fn = 'sitemap.xml'){
if($isExist == 'no'){
  $doc = new DOMDocument('1.0', 'utf-8');  // 声明版本和编码
  $doc -> formatOutput = true;  //格式XML输出
  $sitemapindex = $doc->createElement('sitemapindex');  //创建一个标签
  $xmlns     = $doc->createAttribute('xmlns');  //创建一个属性
  $xmlnsVal   = $doc->createTextNode('http://www.google.com/schemas/sitemap/0.9');
  $xmlns    -> appendChild($xmlnsVal);   //继承属性
  $sitemapindex -> appendChild($xmlns);  //继承属性内容
}else if($isExist == 'yes'){
  $doc = new DOMDocument();
  $doc->load( $fp.$fn );
  $sitemapindex = $doc->getElementsByTagName( "sitemapindex" )->item(0);
}

foreach($array as $key=>$val){
  $sitemap   = $doc->createElement('sitemap');  //创建一个标签
  $name     = $doc->createAttribute('name');  //创建一个属性
  $nameVal   = $doc->createTextNode($type);  //设置属性内容
  $name    -> appendChild($nameVal);  //继承属性
  $id     = $doc->createAttribute('id');  //创建一个属性
  $idVal       = $doc->createTextNode($val['Numbers']);  //设置属性内容
  $id        -> appendChild($idVal);  //继承属性
  $sitemap      -> appendChild($name);  //继承属性内容
  $sitemap   -> appendChild($id);  //继承属性内容
  
  $loc       = $doc->createElement('loc');  //创建一个标签
  $locContent   = $doc->createTextNode($url."/".$type.$val['Numbers'].".xml");  //设置标签内容
  $loc    -> appendChild($locContent); //继承标签内容
  
  $lastmod   = $doc->createElement('lastmod');  //创建一个标签
  $lastmodCon   = $doc->createTextNode(date('Y-m-d',time()));  //设置标签内容
  $lastmod   -> appendChild($lastmodCon); //继承标签内容
  
  $sitemap   -> appendChild($loc);  //继承子类
  $sitemap   -> appendChild($lastmod);  //继承子类
  $sitemapindex -> appendChild($sitemap); //继承子类
}
if($isExist == 'no'){
  $doc              -> appendChild($sitemapindex); //继承子类
}

if(!empty($fp)) _mkdirm($fp);
$doc              -> save($fp.$fn);                  // 生成保存为XML
}

/**
*   xml第二级模板生成
* array $array 需要生成的数组
*   string $url 生成后里面的url链接
* string $type 标识是楼盘还是资讯等其他的
*            building  --  楼盘
*            news      --  新闻资讯
*   string $fp  文件路径(不包括文件名)
*   string $fn  文件名称(包括扩展名)
*/
function modeSubXMl($array,$url,$type,$extension = '',$fp = './xml/',$fn = 'sitemap.xml'){
$doc = new DOMDocument('1.0', 'utf-8');  // 声明版本和编码
$doc -> formatOutput = true;  //格式XML输出

$urlset       = $doc->createElement('urlset');  //创建一个标签
$xmlns     = $doc->createAttribute('xmlns');  //创建一个属性
$xmlnsVal   = $doc->createTextNode('http://www.google.com/schemas/sitemap/0.9');
$xmlns    -> appendChild($xmlnsVal);   //继承属性
$urlset       -> appendChild($xmlns);  //继承属性内容

for($i = 1; $i <= 3; $i++){
  switch($i){
   case 1:
    $tUrl = WWWURL;
    break;
  }
  $urlXML       = $doc->createElement('url');  //创建一个标签
  
  $loc       = $doc->createElement('loc');  //创建一个标签
  $locContent   = $doc->createTextNode($tUrl);  //设置标签内容
  $loc    -> appendChild($locContent); //继承标签内容
  
  $urlXML       -> appendChild($loc);  //继承子类
  $urlXML       -> appendChild($lastmod);  //继承子类
  $urlset       -> appendChild($urlXML); //继承子类
} 

foreach($array as $key=>$val){
  $urlXML       = $doc->createElement('url');  //创建一个标签
  $name     = $doc->createAttribute('name');  //创建一个属性
  $nameVal   = $doc->createTextNode($type);  //设置属性内容
  $name    -> appendChild($nameVal);  //继承属性
  $id     = $doc->createAttribute('id');  //创建一个属性
  $idVal       = $doc->createTextNode($val['Numbers']);  //设置属性内容
  $id        -> appendChild($idVal);  //继承属性
  $urlXML       -> appendChild($name);  //继承属性内容
  $urlXML       -> appendChild($id);  //继承属性内容  
  
  $loc       = $doc->createElement('loc');  //创建一个标签
  $locContent   = $doc->createTextNode($url.$val['Numbers'].$extension);  //设置标签内容
  $loc    -> appendChild($locContent); //继承标签内容
  
  $urlXML       -> appendChild($loc);  //继承子类
  $urlXML       -> appendChild($lastmod);  //继承子类
  $urlset       -> appendChild($urlXML); //继承子类
}
$doc              -> appendChild($urlset); //继承子类

if(!empty($fp)) _mkdirm($fp);
$doc              -> save($fp.$fn);                  // 生成保存为XML
}

 

 

1
1
分享到:
评论

相关推荐

    Thinkphp代码生成器

    Thinkphp代码生成器是一款强大的开发辅助工具,专为基于Thinkphp框架的Web应用程序设计。它极大地提升了开发效率,通过自动化的方式生成表单和实体类,从而减轻了开发者手动编写重复代码的工作负担。这个工具的核心...

    ThinkPHP二级域名分发系统网站源码.zip

    总结起来,基于ThinkPHP的二级域名分发系统利用框架的路由机制,实现了灵活的二级域名管理和业务分发,为开发者提供了构建复杂网站架构的有效工具。在实际项目中,我们需要充分考虑系统的需求和性能,充分利用...

    ThinkPHP整合phpqrcode生成二维码DEMO

    在IT行业中,生成二维码是一种常见的数据编码方式,它能够将大量信息浓缩成一个小型的图形,便于手机扫描和数据传输。本示例是关于如何在ThinkPHP框架中整合phpqrcode库来生成二维码的DEMO。这个过程涉及到前端与...

    thinkphp5.0小程序二维码生成

    在IT行业中,微信小程序已经成为移动应用开发的重要组成部分,而二维码作为连接线上与线下世界的桥梁,其生成和使用在小程序开发中扮演着至关重要的角色。在本项目中,我们聚焦于"thinkphp5.0小程序二维码生成",这...

    thinkphp二级联动

    下面我们将深入探讨如何在ThinkPHP中实现二级联动效果。 首先,我们要理解ThinkPHP的基础架构。它是一个基于MVC(Model-View-Controller)模式的PHP框架,主要由模型、视图和控制器三部分组成。模型负责数据操作,...

    ThinkPHP2.1.0 二级域名布署示例使用说明.chm

    ThinkPHP2.1.0 二级域名布署示例使用说明.chm ThinkPHP2.1.0 二级域名布署示例使用说明.chm ThinkPHP2.1.0 二级域名布署示例使用说明.chm

    ThinkPHP2.1.0 二级域名布署示例使用说明.

    ThinkPHP2.1.0 二级域名布署示例使用说明. ThinkPHP2.1.0 二级域名布署示例使用说明. ThinkPHP2.1.0 二级域名布署示例使用说明. ThinkPHP2.1.0 二级域名布署示例使用说明.

    thinkphp详细高级教程

    本教程旨在帮助读者从设计到SEO,从编程技巧到调试方法,全方位提升在ThinkPHP上的技能。 一、框架基础 ThinkPHP框架采用MVC(Model-View-Controller)模式,将业务逻辑、数据模型和用户界面进行分离,提高了代码的...

    thinkphp5.1.20代码自动生成

    模型是数据访问层的重要组成部分,ThinkPHP5.1.20的代码生成工具可以创建与数据库表结构相对应的模型类,包括基本的增删改查方法。这使得开发者能够快速地进行数据库操作,而无需关心具体的SQL语句,极大地提高了...

    thinkphp生成word文档并导出

    在IT行业中,生成和导出文档是常见的需求,特别是在企业级应用中,如报表生成、数据分析等。ThinkPHP是一款流行的PHP框架,它提供了强大的功能来处理这类任务。本篇文章将详细解析如何使用ThinkPHP框架生成Word文档...

    TOPTP v1.0纯净版(for ThinkPHP2.1RC1)-ThinkPHP代码生成器

    TOPTP代码生成器的出现将给我们带来哪些方便? 大家也许都有同感。...4, 能修改生成器生成的默认样式,自己定义适合你网站项目的模版。 5, 在CMD中或linux的终端中操作,避免给你网站留下漏洞。运行更快速。

    ThinkPHP5代码生成器.zip_possiblyntv_thinkphp_thinkphp5_tp 生成代码

    《ThinkPHP5代码生成器深度解析与应用》 在当今快速发展的互联网行业中,开发效率成为了决定项目成败的关键因素之一。为了提高开发效率,各种框架和工具应运而生,其中ThinkPHP5作为国内广泛使用的PHP框架,凭借其...

    thinkphp 三级联动数据库

    三级联动省市区县的数据库,与本人的Thinkphp 三级联动博文均为同步共存,资深程序员可以自行处理

    130套thinkphp5网站模板源码,企业网站建设thinkphp模板,建站thinkphp源码模板网站搭建

    本资源包含130套专为ThinkPHP5框架设计的网站模板源码,是用于企业网站建设的理想选择,可以帮助开发者快速构建美观且功能完善的网站。 首先,我们要理解ThinkPHP5框架的核心特点。它采用了MVC(Model-View-...

    传智播客ThinkPHP后端代码生成器

    使用【传智播客ThinkPHP后端代码生成器】,开发者可以自定义生成的代码结构,包括数据库表映射的模型类、控制器中的操作方法、视图文件等。这大大提高了开发效率,尤其是在处理复杂业务逻辑和大量数据表时,能够快速...

    thinkphp3.2,站内生成动态二维码,可以实现分销

    总的来说,使用ThinkPHP 3.2动态生成站内二维码是一种高效且灵活的方法,可以为网站增加互动性,提高用户体验,同时也能帮助商家进行精准的营销策略。在实际开发过程中,还需要结合前端技术,如JavaScript和CSS,以...

    Thinkphp小程序一键生成平台系统开源小程序

    Thinkphp小程序一键生成平台系统开源小程序Thinkphp小程序一键生成平台系统开源小程序Thinkphp小程序一键生成平台系统开源小程序Thinkphp小程序一键生成平台系统开源小程序Thinkphp小程序一键生成平台系统开源小程序...

    ThinkPHP新闻无限级分类

    在IT行业中,数据库管理和数据结构的设计是至关重要的,特别是在内容管理系统或者新闻网站中。当我们谈论“ThinkPHP新闻无限级分类”时,这是一个关于利用ThinkPHP框架实现新闻分类的高级功能,它允许我们创建一个...

    Thinkphp5多个小程序一键生成平台源码(含小程序源码).rar

    Thinkphp5一键生成小程序源码,平台系统cms系统出售,平台没加密,可以进行OEM招商。一键生成小程序源码共上线29套各行各业模板。一键生成小程序源码包含小程序前端和后台源码,附详细安装说明和小程序平台安装文档。...

    Thinkphp二次开发DJ音乐网站整站源码

    【标题】"Thinkphp二次开发DJ音乐网站整站源码" 涉及的主要知识点是基于ThinkPHP框架进行Web应用的二次开发,以及构建一个专注于DJ音乐的网站。ThinkPHP是中国国内广泛使用的PHP开发框架,它提供了丰富的功能和高效...

Global site tag (gtag.js) - Google Analytics