背景:
PHPのSmartyを使っていて不便なことは,Smartyのinclude命令によって外部ファイルを読み込んでいる場合である.そのテンプレートファイルをDreamweaverで編集するときにはSmartyタグがHTMLとして認識されるので非常に不便.また,ファイルがincludeされないので,include後の画面表示ができない.
ソリューション:
このページに載っている方法を使うと,HTMLファイルをDreamweaverで開くときにファイルをhookして,includeされたファイルを画面に表示してくれる.
http://smarty.incutio.com/?page=SmartyDreamweaver
手順:
1.以下のソースコードをファイルに保存し,”Dreamweaverをインストールしたディレクトリ\Configuration\Translators\”.に保存する.ファイル名はなんでもいい.
<html> <head> <title>Smarty Include Tag Translator</title> <meta http-equiv="Content-Type" content="text/html; charset="/> <script language="JavaScript"> /** * This translator will only work on this format: * {include file="foo.tpl"} * filename must surrounded by double or single quotes * if 'assign' or '[var]' attribute exists, it will not tranlated * the include tag must be in one line * extra spaces are allowed, e.g. { include file = " foo.tpl " } * all templates file suppose to stay in the same top 'templates' folder * you can include subfolder in the include tag * all other formats will be displayed as a simple 'inc' icon */ /** * define smarty delimiters */ var LDELIM = "{"; var RDELIM = "}"; function getTranslatorInfo() { var transArray = new Array(6); transArray[0] = "SMARTY_INCLUDE"; transArray[1] = "Smarty Include Translator"; transArray[2] = "0"; transArray[3] = "1"; transArray[4] = LDELIM + "[ \t]*include"; transArray[5] = "byExpression"; return transArray; } function translateMarkup( docNameStr, siteRootStr, inStr ) { var pos = 0; var patternFound = false; var outStr = ''; var depPath = ''; var remainInStr = inStr; smartyRegExp = new RegExp("(" + LDELIM + "[ \t]*include[ \t]+file[ \t]*=[ \t]*[\"|'][ \t]*([^\"^']*)[ \t]*[\"|'][ \t]*" + RDELIM + ")", "im"); while ((pos = remainInStr.search(smartyRegExp)) >= 0) { var matchStr = RegExp.$1; var templateFileName = RegExp.$2; var templateFullName = templateFileName; var smartyFile; outStr += remainInStr.substr(0, pos); smartyFile = new File(templateFullName, docNameStr); if (smartyFile.exists()) { smartyContent = smartyFile.getContents(); if (smartyContent.length < = 0) { // this is an empty file smartyContent = " "; } depPath = smartyFile.getAbsolutePath(); } else { // file doesn't exist smartyContent = "File Error!"; } // Do translation outStr += '<MM:BeginLock translatorClass="' + getTranslatorInfo()[0] + '" type="smartyInclude" orig="' + escape(matchStr) + '"'; if (depPath.length > 0) outStr += ' depFiles="' + depPath + '"'; outStr += '>' + smartyContent + '<mm:endlock>'; // Re-search text following match remainInStr = remainInStr.substring(pos + matchStr.length); // Remember that at least one translation was performed patternFound = true; } outStr += remainInStr; return patternFound ? outStr : ""; } </mm:endlock></script> </head> <body> </body> </html>
2.
Dreamweaverを再起動する.
たったこれだけで,格段に作業が楽になる.
コメント