{"id":3438,"date":"2020-02-01T11:56:59","date_gmt":"2020-02-01T03:56:59","guid":{"rendered":"https:\/\/yanjingang.com\/blog\/?p=3438"},"modified":"2020-07-31T15:38:42","modified_gmt":"2020-07-31T07:38:42","slug":"fis3","status":"publish","type":"post","link":"https:\/\/yanjingang.com\/blog\/?p=3438","title":{"rendered":"fis3\u2014\u524d\u7aef\u5de5\u7a0b\u6784\u5efa\u5de5\u5177"},"content":{"rendered":"<p>FIS3 \u662f\u9762\u5411\u524d\u7aef\u7684\u5de5\u7a0b\u6784\u5efa\u5de5\u5177\u3002\u89e3\u51b3\u524d\u7aef\u5de5\u7a0b\u4e2d<span style=\"color: #ff0000;\">\u6027\u80fd\u4f18\u5316\u3001\u8d44\u6e90\u52a0\u8f7d\uff08\u5f02\u6b65\u3001\u540c\u6b65\u3001\u6309\u9700\u3001\u9884\u52a0\u8f7d\u3001\u4f9d\u8d56\u7ba1\u7406\u3001\u5408\u5e76\u3001\u5185\u5d4c\uff09\u3001\u6a21\u5757\u5316\u5f00\u53d1\u3001\u81ea\u52a8\u5316\u5de5\u5177\u3001\u5f00\u53d1\u89c4\u8303\u3001\u4ee3\u7801\u90e8\u7f72<\/span>\u7b49\u95ee\u9898\u3002<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/02\/fis-logo-2.png\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-3456\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/02\/fis-logo-2.png\" alt=\"\" width=\"220\" height=\"88\" \/><\/a><\/p>\n<p>\u5b98\u7f51\uff1a<a href=\"http:\/\/fis.baidu.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/fis.baidu.com\/<\/a><\/p>\n<p>\u901a\u4fd7\u70b9\u8bf4\uff0cfis\u5185\u7f6e\u4e86less\u3001sass\u3001js \/css\/html-compress\u3001mod.js\u3001smarty\u3001vue.js\u3001angularjs\u7b49\u5e38\u7528\u524d\u7aef\u7ec4\u4ef6\u7684\u5f00\u53d1\u5e93\uff0c\u4f7f\u7528\u7b80\u5355\u7684\u547d\u4ee4\u521d\u59cb\u5316\u9879\u76ee\uff0c\u5e76\u901a\u8fc7\u7b80\u5355\u7684\u914d\u7f6e\u5373\u53ef\u5b9e\u73b0\u6587\u4ef6\u6307\u7eb9\u3001\u8d44\u6e90\u538b\u7f29\u3001CssSprite\u56fe\u7247\u5408\u5e76\u3001\u672c\u5730\u8c03\u8bd5\uff08\u901a\u8fc7\u914d\u7f6e\u6a21\u62df\u540e\u7aef\u6570\u636e\uff09\u3001\u4e00\u952e\u53d1\u5e03\u3002<\/p>\n<p>\u672c\u6587\u4ee5<a href=\"https:\/\/github.com\/fex-team\/fis3-smarty\" target=\"_blank\" rel=\"noopener noreferrer\">fis3-smarty<\/a>\u4e3a\u4f8b\u8bb2\u89e3\u5982\u4f55\u5feb\u901f\u5b9e\u73b0\u4e00\u4e2a\u524d\u540e\u7aef\u5206\u79bb\u3001\u7ec4\u4ef6\u5316\u7684\u524d\u7aef\u5de5\u7a0b\u3002<!--more--><\/p>\n<h1>\u4e00\u3001\u5b89\u88c5<\/h1>\n<pre class=\"pure-highlightjs\"><code class=\"\"># nodejs\uff08\u6ce8\uff1a\u4e00\u5b9a\u5230<a href=\"https:\/\/nodejs.org\/zh-cn\/download\/\" target=\"_blank\" rel=\"noopener noreferrer\">\u5b98\u7f51\u4e0b\u8f7d<\/a>\u6700\u65b0\u7248\u672c\uff0c\u522b\u7528yum\u6216brew\u5b89\u88c5\uff0cnode\u7248\u672c\u592a\u4f4e\u6709\u5f88\u591a\u95ee\u9898\uff09\r\nwget https:\/\/nodejs.org\/dist\/v12.14.1\/node-v12.14.1-linux-x64.tar.xz\r\nxz -d node-v12.14.1-linux-x64.tar.xz  &amp;&amp; tar xvf node-v12.14.1-linux-x64.tar\r\ncd node-v12.14.1-linux-x64\r\nsudo cp include bin lib share \/usr\/ -r\r\n# fis3\r\nsudo npm install -g fis3\r\nfis3 -v\r\n# smarty\r\nsudo npm install -g fis3-smarty\r\n# \u6709\u5386\u53f2fis-plus\u9879\u76ee\u7684\u53ef\u4ee5\u5b89\u88c5fis-plus\r\nsudo npm install -g fis-plus<\/code><\/pre>\n<h1>\u4e8c\u3001\u4f7f\u7528<\/h1>\n<pre style=\"padding-left: 40px;\"># 0.\u642d\u5efa\u9879\u76ee\u811a\u624b\u67b6\r\nmkdir demo-smarty\r\n<span class=\"pl-c1\">cd<\/span> demo-smarty\r\nfis3 init php-smarty\r\n  prompt: namespace:  demo-smarty\r\n  prompt: Run `npm install`?:  (y) y\r\n  prompt: Run `fis3 install`?:  (y) y\r\n\r\n# 1.\u672c\u5730\u8c03\u8bd5\r\n\u542f\u52a8\u672c\u5730\u8c03\u8bd5server\uff1a\r\n<span class=\"pl-c1\">cd<\/span> demo-smarty\r\nfis3 server restart -p 8090 --type smarty -w    # fis3 server -h\u67e5\u770b\u5e2e\u52a9\r\n\u8bbf\u95ee\u672c\u5730\u8c03\u8bd5server\uff1a\r\nhttp:\/\/127.0.0.1:8090\/\r\n\r\n# 2.\u7f16\u8bd1&amp;\u53d1\u5e03\r\n<span class=\"pl-c1\">cd<\/span> demo-smarty\r\nfis3 release dev -d output\/\r\n*\u4ea7\u51fa\u7684\u4e09\u4e2a\u5b50\u76ee\u5f55\uff1aconfig\u3001static\u3001template\r\n\r\n\r\n\u51c6\u5907widget\u7b49smarty-plugin\uff1a\r\n vim odp\/conf\/smarty.conf\r\n   template_dir: template\/\r\n   config_dir: template\/config\/\r\n   plugins_dir: template\/plugin\/\r\n cd odp\/template\r\n wget https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/02\/plugin.tar.gz\r\n tar zxvf plugin.tar.gz\r\n\u628a\u7f16\u8bd1\u597d\u7684\u6a21\u7248\u548c\u9759\u6001\u6587\u4ef6\u653e\u5230odp\u76ee\u5f55\r\n<span class=\"pl-c1\">cd<\/span> demo-smarty\r\nvim build.sh # \u628abuild\u548cdeploy\u653e\u5230\u4e00\u4e2a\u811a\u672c\u91cc\u4e86\r\n  #\/bin\/sh\r\n  ODP_PATH=\/home\/work\/odp\r\n  # fis3 build\r\n  fis3 release dev -d .\/output\r\n  if [ ! -d \".\/output\/static\" ]; then\r\n      echo \".\/output\/static path not exists, build fail!\"\r\n      exit 1\r\n  fi\r\n  # deploy to odp\r\n  mkdir $ODP_PATH\/template\/config -p\r\n  mkdir $ODP_PATH\/webroot\/static\/ -p\r\n  cp .\/output\/template\/* $ODP_PATH\/template\/ -r\r\n  cp .\/output\/static\/* $ODP_PATH\/webroot\/static\/ -r\r\n  cp .\/output\/config\/*-map.json $ODP_PATH\/template\/config\/ -r\r\n  echo \"build done!\"\r\n\r\nsh build.sh\r\n\r\n\r\n# 4. sync\u540c\u6b65\u8bf7\u6c42\u6a21\u7248\u6e32\u67d3\r\n\u521b\u5efa\u6a21\u7248\u6e32\u67d3action\uff1a\r\n&lt;?php\r\n\/**\r\n * @name Action_Index\r\n * @desc \u6d4b\u8bd5\u9875\u9762\r\n * @author \u95eb\u91d1\u94a2(yanjingang@mail.com)\r\n *\/\r\nclass Action_Index extends <span style=\"color: #ff0000;\">Ap_Action_Abstract<\/span> {\r\n \/**\r\n   *\r\n   * @param input \r\n   * @return result \r\n   *\r\n   **\/\r\n   public function execute() {\r\n        $arrResult = [\r\n            'errno'=&gt; 0,\r\n            'data'=&gt; ['username'=&gt; 'yanjingang@mail.com'] ,\r\n         ];\r\n         \/\/ TODO\r\n         \/\/\u6a21\u7248\u6e32\u67d3\r\n         $smartyConf = Bd_Conf::getConf('\/smarty\/');\r\n         $tpl = Bd_TplFactory::getInstance($smartyConf['default']);\t\/\/conf\/smarty.conf\u4e2d\u7684default\u914d\u7f6e\r\n         $tpl-&gt;<span style=\"color: #ff0000;\">assign<\/span>($arrResult['data']);\t\/\/\u7528\u4e8e\u540c\u6b65\u6e32\u67d3\u7684\u6570\u636e\r\n         $tpl-&gt;display('<span style=\"color: #ff0000;\">demo-smarty\/page\/index.tpl<\/span>');\r\n    }\r\n}\r\n<\/pre>\n<p>\u8bbf\u95eeaction\u770b\u5230\u7684\u9875\u9762\uff1a<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/02\/fis-demo.png\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-3453\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/02\/fis-demo.png\" alt=\"\" width=\"214\" height=\"278\" \/><\/a><\/p>\n<p>\u6d4b\u8bd5\u4ee3\u7801\uff1ahttps:\/\/github.com\/yanjingang\/study\/tree\/master\/fis<\/p>\n<p>&nbsp;<\/p>\n<h1>\u4e09\u3001\u5e38\u89c1\u95ee\u9898<\/h1>\n<p>1.$ fis3 release \u62a5\u9519<\/p>\n<p>[INFO] Currently running fis3 (\/usr\/lib\/node_modules\/fis3\/)<br \/>\n\/usr\/lib\/node_modules\/fis3\/node_modules\/chokidar\/index.js:151<br \/>\nasync remove(item) {<br \/>\n^^^^^^<\/p>\n<p>\u539f\u56e0\uff1anodejs\u7248\u672c\u8fc7\u4f4e<\/p>\n<p>$ node -v<br \/>\nv6.17.1<\/p>\n<p>\u89e3\u51b3\u529e\u6cd5\uff1a\u4f7f\u7528<code class=\"\"><a href=\"https:\/\/nodejs.org\/zh-cn\/download\/\" target=\"_blank\" rel=\"noopener noreferrer\">\u5b98\u7f51\u4e0b\u8f7d<\/a><\/code>\u6700\u65b0\u7248\u672c\u540e\u91cd\u65b0\u6b63\u5e38\u3002<\/p>\n<p>2.\u5207\u6362\u9875\u9762\u65f6\uff0ctpl\u66f4\u65b0\u4e86main block\uff0c\u4f46\u662f\u9875\u9762\u5374\u672a\u5207\u6362<\/p>\n<p>\u539f\u56e0\uff1ablock\u5b9a\u4e49\u5728\u4e86<span class=\"s1\">widget\u7ec4\u4ef6\u5185\uff0csmarty\u4e3a\u4e86\u63d0\u9ad8\u6e32\u67d3\u6548\u7387\u9ed8\u8ba4\u4f1a\u5bf9widget\u7ec4\u4ef6\u6a21\u7248\u7f16\u8bd1\u8fdb\u884ccache\uff08cache\u4f4d\u7f6e\uff1a<\/span><span class=\"s1\">data\/smarty\/compile\/\uff09\uff0c\u4f1a\u5bfc\u81f4widget\u7ec4\u4ef6\u5185\u7684block\u88abcache\uff0c\u4ece\u800c\u65e0\u6cd5\u66ff\u6362\u4e3a\u5f53\u524dtpl\u4e2d\u7684tpl block<\/span><\/p>\n<p>\u89e3\u51b3\u529e\u6cd5\uff1ablock\u4e0d\u8981\u5b9a\u4e49\u5728widget\u4e2d\uff0c\u7edf\u4e00\u653e\u5230page\/layout.tpl\u4e2d\u5373\u53ef\u3002<\/p>\n<p>yan 20.2.1 21:30<\/p>\n","protected":false},"excerpt":{"rendered":"<p>FIS3 \u662f\u9762\u5411\u524d\u7aef\u7684\u5de5\u7a0b\u6784\u5efa\u5de5\u5177\u3002\u89e3\u51b3\u524d\u7aef\u5de5\u7a0b\u4e2d\u6027\u80fd\u4f18\u5316\u3001\u8d44\u6e90\u52a0\u8f7d\uff08\u5f02\u6b65\u3001\u540c\u6b65\u3001\u6309\u9700\u3001\u9884\u52a0\u8f7d\u3001\u4f9d\u8d56\u7ba1\u7406\u3001\u5408\u5e76 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[949],"tags":[953,950,956,957,955,951,954,952],"_links":{"self":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/3438"}],"collection":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3438"}],"version-history":[{"count":0,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/3438\/revisions"}],"wp:attachment":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3438"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3438"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3438"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}