【开发者】大概算是进阶建议贴

超级版主 沉冰浮水 2019-5-16 4088

根据个人经验和理念,整理出的一些“这样写可能比较好”的内容,或者原来普遍使用方法其实已经有了替代。。

-------------------

初学者Teaching计划

https://bbs.zblogcn.com/thread-102975.html

沉冰浮水.tk | 我的咸鱼心←_←我大概率能够解决你所实际面临的问题(收费),然而”你提出的问题“却往往是另一个问题。

最后于 2020-5-18 被沉冰浮水编辑 ,原因:
最新回复 (16)
全部楼主
  • 超级版主 沉冰浮水 2020-5-18 0
    引用 2

    Z-Blog相关资讯RSS订阅-博友杂谈-ZBlogger技术交流中心

    https://bbs.zblogcn.com/thread-100631.html

    [开发者]正则表达式相关专贴-开发者中心-ZBlogger技术交流中心

    https://bbs.zblogcn.com/thread-101713.html

    ZBLOG应用中心验证回调服务端接收插件-开发者中心-ZBlogger技术交流中心

    https://bbs.zblogcn.com/thread-94905.html

    【开发者】1.6新增应用打包时排除文件(夹)功能专贴-开发者中心-ZBlogger技术交流中心

    https://bbs.zblogcn.com/thread-102780.html

    沉冰浮水.tk | 我的咸鱼心←_←我大概率能够解决你所实际面临的问题(收费),然而”你提出的问题“却往往是另一个问题。

    最后于 2020-6-19 被沉冰浮水编辑 ,原因:
  • 超级版主 沉冰浮水 2020-5-18 0
    引用 3

    ## 不要跨文件闭合HTML标签

    默认主题已按此标准修改:https://github.com/zblogcn/zblogphp/tree/master/zb_users/theme/default/template

    下图是默认模板的结构,除了html和body外,div#divAll之类的结束也在footer.php。很难排查是否正确闭合

    所以“让所有标签在当前文件闭合”感觉会好一些:

    {* Template Name:首页及列表页 *}
    <!DOCTYPE html>
    <html lang="{$lang['lang_bcp47']}">
    <head>
      {template:header}
    </head>
    <body class="multi {$type}">
      <!-- 历史原因,header被上边占了,这里可以用hero,而不是放在在一个文件里 -->
      {template:hero}
      <div id="divNavBar">
        <ul>{module:navbar}</ul>
      </div>
      <div id="divMiddle">
        <div id="divMain">列表索引或正文内容</div>
        <div id="divSidebar">{template:sidebar}</div>
      </div>
      {template:footer}
    </body>
    </html>

    沉冰浮水.tk | 我的咸鱼心←_←我大概率能够解决你所实际面临的问题(收费),然而”你提出的问题“却往往是另一个问题。

    最后于 7月前 被沉冰浮水编辑 ,原因:
  • 超级版主 沉冰浮水 2020-5-18 0
    引用 4

    文章页经常读取Tag作为关键词,然而不知道从什么时候起,都是在模板里遍历然后拼接,其实直接使用$article->TagsToNameString()或者$article->TagsName←←至少在14年就已经有这个方法了。。。

    沉冰浮水.tk | 我的咸鱼心←_←我大概率能够解决你所实际面临的问题(收费),然而”你提出的问题“却往往是另一个问题。

    最后于 2020-5-18 被沉冰浮水编辑 ,原因:
  • 超级版主 沉冰浮水 2020-5-20 0
    引用 5

    tags等系统模块内容的重建:

    zblog支持自定义module-tags等模板,但是在新主题启用时并不会主动更新到相应的模块,可使用下边方法触发重建:

    1、单纯重建相应内容:

    $zbp->AddBuildModule('tags');
    $zbp->AddBuildModule('previous'); // 可以依次添加多个要重建的模块
    $zbp->BuildModule();

    2、对模块其他属性进行设置后重建:

    // 将tags类似改为div
    $mod = $zbp->modulesbyfilename["tags"];
    $mod->Type = "div";
    $mod->Build();
    $mod->Save();

    沉冰浮水.tk | 我的咸鱼心←_←我大概率能够解决你所实际面临的问题(收费),然而”你提出的问题“却往往是另一个问题。

    最后于 2020-5-20 被沉冰浮水编辑 ,原因:
  • 超级版主 沉冰浮水 2020-5-25 0
    引用 6
    jQuery里不能用箭头函数。。

    沉冰浮水.tk | 我的咸鱼心←_←我大概率能够解决你所实际面临的问题(收费),然而”你提出的问题“却往往是另一个问题。

  • 超级版主 沉冰浮水 2020-5-28 0
    引用 7

    【VSCode】【PHP】【扩展】

    PHP DocBlocker - Visual Studio Marketplace

    https://marketplace.visualstudio.com/items?itemName=neilbrayfield.php-docblocker

    更多扩展见:

    【列表】VSCode插件推荐_电脑网络_沉冰浮水

    https://www.wdssmq.com/post/20201120794.html

    其中重点推荐的:

    [Format HTML in PHP]

    [PHP Intelephense]

    [Prettier]

    [Bracket Pair Colorizer]

    沉冰浮水.tk | 我的咸鱼心←_←我大概率能够解决你所实际面临的问题(收费),然而”你提出的问题“却往往是另一个问题。

    最后于 10月前 被沉冰浮水编辑 ,原因:
  • 超级版主 沉冰浮水 2020-5-30 0
    引用 8

    【编辑器】【代码片段】【VSCode】

    一些常用代码可以预先设置为代码片段,比如下边定义可以通过输入zbp快速生成global $zbp;

      "zbp": {
        "prefix": "zbp",
        "body": "global \\$zbp;",
        "description": "函数内调用zbp全局变量"
      }

    wdssmq/snippets: Z-Blog程序编辑器代码提示片段

    https://github.com/wdssmq/snippets

    沉冰浮水.tk | 我的咸鱼心←_←我大概率能够解决你所实际面临的问题(收费),然而”你提出的问题“却往往是另一个问题。

    最后于 3月前 被沉冰浮水编辑 ,原因:
  • 超级版主 沉冰浮水 2020-7-20 0
    引用 9
    【倡议】
    主题开发者可以在事实层面上逐步将commentpost.php改成comment-post.php
    没啥特别的理由,,强迫症使然。。

    沉冰浮水.tk | 我的咸鱼心←_←我大概率能够解决你所实际面临的问题(收费),然而”你提出的问题“却往往是另一个问题。

  • 超级版主 沉冰浮水 2020-9-12 0
    引用 10

    【主题】【tips】

    <!-- 编辑入口 -->
    <span data-id="{$article.ID}" data-type="{$article.Type}" class="js-edt [is-pulled-right is-hidden]">[编辑]</span>

    JS:

        $(".js-edt").each(function () {
          const id = $(this).data("id");
          const type = $(this).data("type");
          const act = type ? "PageEdt" : "ArticleEdt";
          $(this).html(
            '[<a title="编辑" rel="external" href="' +
              window.bloghost +
              `zb_system/cmd.php?act=${act}&id=${id}">编辑</a>]`
          );
        }).removeClass("is-hidden hidden");

    JS部分可以用浏览器脚本引入,类似这样:https://github.com/wdssmq/userscript/blob/master/zblog/edt.user.js

    沉冰浮水.tk | 我的咸鱼心←_←我大概率能够解决你所实际面临的问题(收费),然而”你提出的问题“却往往是另一个问题。

  • 超级版主 沉冰浮水 2020-9-19 0
    引用 11

    【关于应用配置中图片的上传】【来自水水的Diss】

    主题Logo,favicon,二维码等允许用户自行上传的图片,目前大部分都是调用UE的上传组件并且进了附件文件夹。。如果更换主题或者更换二维码内容时旧图片会形成冗余。。虽然也可以复用地址,但是找到旧图片也会很麻烦。所以你们连个move_uploaded_file都不会自己写么,自己写么,写么,么。

    注:实际保存路径应该使用规则文件排除,防止用户更新或重装时被覆盖;参考「zbignore.txt 参考

    -------------------

    具体请参考如下主题,并理解具体意图后使用,后边 Git 地址内的东西也很重要;

    mzERK - Z-Blog 应用中心

    https://app.zblogcn.com/?id=2120

    https://gitee.com/wdssmq/ZBP_THEME/blob/master/mzERK/include.php#L95

    https://gitee.com/wdssmq/ZBP_THEME/blob/master/mzERK/include.php#L153

    https://gitee.com/wdssmq/ZBP_THEME/blob/master/mzERK/zbignore.txt

    ----------------

    $act = GetVars("act", "GET");
    if ($act === "save") {
      CheckIsRefererValid();
      // 配置项保存 ↓
      foreach ($_POST as $key => $value) {
        $zbp->Config("mzERK")->$key = $value;
      }
      $zbp->SaveConfig("mzERK");
      // 配置项保存结束 ↑
      $extList = "png|jpg|jpeg|ico"; // 上传相关开始
      foreach ($_FILES as $key => $value) {
        if ($_FILES[$key]['error'] === 0) {
          $ext = GetFileExt($_FILES[$key]['name']);
          $file = mzERK_Path("u-{$key}"); // 根据字段返回实际文件路径,参考 mzERK 主题
          // 只允许覆盖已有文件,不允许增加新文件
          if (!HasNameInString($extList, $ext) || !is_file($file)) {
            continue;
          }
          // 接受上传文件
          if (is_uploaded_file($_FILES[$key]['tmp_name'])) {
            move_uploaded_file($_FILES[$key]['tmp_name'], $file);
          }
        }
      } // 上传结束
      $zbp->SetHint('good');
      Redirect('./main.php');
    }

    沉冰浮水.tk | 我的咸鱼心←_←我大概率能够解决你所实际面临的问题(收费),然而”你提出的问题“却往往是另一个问题。

    最后于 1月前 被沉冰浮水编辑 ,原因:
  • 超级版主 沉冰浮水 11月前 0
    引用 12

    【百度事件统计封装】

      // 百度统计事件
      function _hmtLOG(...args) {
        // const args = [].slice.call(arguments, 0);
        if ("undefined" !== typeof _hmt) {
          _hmt.push(["_trackEvent", ...args]);
        }
        console.log(args);
      }
      // 使用,最多支持三个参数
      _hmtLOG("阅读更多", "点击");
      _hmtLOG("阅读更多", "计时结束");
      _hmtLOG("阅读更多", "跳过");


    沉冰浮水.tk | 我的咸鱼心←_←我大概率能够解决你所实际面临的问题(收费),然而”你提出的问题“却往往是另一个问题。

  • 超级版主 沉冰浮水 10月前 0
    引用 13

    “随机”文章函数

    function xnxf_GenRnd($nums)
    {
      // 一种比较节省资源的随机文章获取方法-ZBLOG教程-鸟儿网络
      // https://www.birdol.com/zblogjiaocheng/756.html
      // 有修改和补充,以及list()方法是不是有php版本要求。。
      global $zbp;
      $sql = $zbp->db->sql->Select(
        $zbp->table['Post'],
        array("MIN(log_ID)", "MAX(log_ID)"),
        array(
          array('=', 'log_Type', '0'),
          array('=', 'log_Status', '0'),
        ),
        array('log_PostTime' => 'ASC'),
        null,
        null
      );
      $array = $zbp->db->Query($sql);
      list($min, $max) = explode(':', join(":", $array[0]));
      // list($min, $max) = $array[0]; // ← 这样写取不到值
      // 判断相等时仍然有$min和$min+1两种取法
      if ($max - $nums >= $min) {
        $i = mt_rand($min, $max - $nums + 1);
      } else {
        $i = $min;
      }
      $order = '';
      $where = array(
        array('=', 'log_Status', '0'),
        array('>=', 'log_ID', $i)
      );
      $articles = $zbp->GetArticleList(array('*'), $where, $order, array($nums), '');
      $rltHtml = "<h3 class=\"is-px-14 title\">随机文章</h3><ul class=\"a-color\">";
      foreach ($articles as $article) {
        $rltHtml .= "<li class=\"li-nowrap\"><a href=\"{$article->Url}\" title=\"{$article->Title}\">{$article->Title}</a></li>";
      }
      return $rltHtml . "</ul>";
    }


    沉冰浮水.tk | 我的咸鱼心←_←我大概率能够解决你所实际面临的问题(收费),然而”你提出的问题“却往往是另一个问题。

  • 用户 dokit 9月前 0
    引用 14
    沉冰浮水 文章页经常读取Tag作为关键词,然而不知道从什么时候起,都是在模板里遍历然后拼接,其实直接使用$article-&gt;TagsToNameString()或者$article-&gt ...
    获取带链接的tag,还是需要遍历一下吧?
  • 超级版主 沉冰浮水 2月前 0
    引用 15

    取消评论后自动保存用户信息:

    zbp.plugin.unbind("userinfo.readFromHtml", "system");


    沉冰浮水.tk | 我的咸鱼心←_←我大概率能够解决你所实际面临的问题(收费),然而”你提出的问题“却往往是另一个问题。

  • 超级版主 沉冰浮水 1月前 0
    引用 16

    「后台配置项应用 tab 切换」

    后台配置项如果略多,可以尝试拆分成 tab;

    main.php ↓

    <?php
    // ……………………
    $action='root';
    if (!$zbp->CheckRights($action)) {$zbp->ShowError(6);die();}
    if (!$zbp->CheckPlugin('appid')) {$zbp->ShowError(48);die();}
    
    // 权限仅需要检查一次
    if (count($_POST) > 0) {
     CheckIsRefererValid();
    }
    // ……………………
    ?>
    
    
    <div id="divMain2">
    <div class="content-box">
      <ul class="content-box-tabs">
        <li><a href="#tab1" class="default-tab current">基本设置</a></li>
        <li><a href="#tab2">幻灯片</a></li>
        <li><a href="#tab3">缩略图</a></li>
      </ul>
      <div style="clear: both"></div>
      <div class="content-box-content">
        <div class="tab-content default-tab" id="tab1">
          <?php include "admin/basic.php"; ?>
        </div>
        <div class="tab-content" id="tab2">
          <?php include "admin/slide.php"; ?>
        </div>
        <div class="tab-content" id="tab3">
          <?php include "admin/thumbnail.php"; ?>
        </div>
      </div>
    </div>
    </div>


    admin/basic.php ↓

    <?php
    if (!isset($zbp)) {
        exit;
    }
    $act = GetVars('act', 'GET');
    $suc = GetVars('suc', 'GET');
    if ($act == 'saveBasic') {
        // 前边判断过了这里可以不用
        // CheckIsRefererValid();
        // 拆分后保存项目和流程也应该根据实际修改
        foreach ($_POST as $key => $val) {
            if (substr($key, 0, 5) == 'read_') {
                continue;
            }
            $zbp->Config('appid')->$key = trim($val);
        }
        // 图片相关的请参考这下边贴子
        // https://bbs.zblogcn.com/thread-101310.html#485997
    
        $zbp->SaveConfig('appid');
        $zbp->BuildTemplate();
        $zbp->SetHint('good');
        Redirect('./main.php' . ($suc == null ? '' : "?act={$suc}"));
    }
    ?>
    <form action="<?php echo BuildSafeURL("main.php?act=saveBasic"); ?>" method="post">
        <table width="100%" class="tableBorder">
            <tr>
                <th width="10%">项目</th>
                <th>内容</th>
                <th width="45%">说明</th>
            </tr>
            <tr>
                <td>配置项 A</td>
                <td><?php zbpform::text("aaa", $zbp->Config("appid")->aaa, "90%"); ?></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td colspan="2"><input type="submit" value="提交" /></td>
            </tr>
        </table>
    </form>


    沉冰浮水.tk | 我的咸鱼心←_←我大概率能够解决你所实际面临的问题(收费),然而”你提出的问题“却往往是另一个问题。

  • 超级版主 沉冰浮水 1月前 0
    引用 17

    接 16 楼:

    $(function () {
      // tabs
      function fnToggleTab() {
        if (location.hash !== "") {
          $(".tab-content").hide();
          $(".content-box-tabs a").removeClass("current");
          $(location.hash).show();
          $('a[href="' + location.hash + '"]').addClass("current");
        }
      }
      fnToggleTab();
      $(".content-box-tabs a").click(function () {
        //alert(this.href);
        window.history.pushState(null, null, this.href.replace(/#tab1/, ""));
      });
    );


    沉冰浮水.tk | 我的咸鱼心←_←我大概率能够解决你所实际面临的问题(收费),然而”你提出的问题“却往往是另一个问题。

    • ZBlogger技术交流中心
      18
          
返回