質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

Q&A

1回答

2264閲覧

smarty 3.1.30 pluginのautoloadが動作しない

HS1111

総合スコア91

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

0グッド

0クリップ

投稿2016/10/10 06:43

編集2016/10/10 06:48

PHP 5.6.25 + Smarty 3.1.30で開発しており、Smartyで独自プラグインを作成し使用したいのですが、どうしてもrequireしてくれません。

lang

1$this->setEngine(new Smarty()); 2$this->getEngine()->compile_dir = TOP_DIR_NAME."/template_c/"; 3$this->getEngine()->config_dir = TOP_DIR_NAME."/template_configs/"; 4$this->getEngine()->cache_dir = TOP_DIR_NAME."/template_cache/"; 5$this->getEngine()->addPluginsDir(TOP_DIR_NAME.'/SmartyCustomPlugins/');

上記の通りPluginディレクトはaddPluginsDir()メッソッドで絶対パスで追加してあります。

悩んだ挙句、smartyのspl_autoload_registerを読んでみるとautoload関数内では、どうみてもsmarty::plugins_dirを参照している気配がないのですがバグでしょうか...?

それと、クラス名を小文字に変換してファイル名を特定している部分もマニュアルに記載が無いようですが仕様ですか?

/common_libs/Smarty/libs/Autoloader.php

lang

1/** 2 * Handles auto loading of classes. 3 * 4 * @param string $class A class name. 5 */ 6public static function autoload($class) 7{ 8 var_dump($class); 9 $_class = strtolower($class); 10 if (strpos($_class, 'smarty') !== 0) { 11 return; 12 } 13 $file = self::$SMARTY_SYSPLUGINS_DIR . $_class . '.php'; 14 if (is_file($file)) { 15 include $file; 16 } else if (isset(self::$rootClasses[ $_class ])) { 17 $file = self::$SMARTY_DIR . self::$rootClasses[ $_class ]; 18 if (is_file($file)) { 19 include $file; 20 } 21 } 22 return; 23}

ちなみにspl_autoload_registerはフレームワーク側でも使用しており多段になってますが、smartyのautoloadも追加され動作している様です。(xdebugのtraceで確認済み)

独自プラグイン関数を使用しない場合Smartyは正常に機能している様です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Smarty詳しくないですし、あまり回答にはなっていないと思いますが
一旦、外部で公開されているプラグインを導入してみてどのように実装されている比較してみたらどうでしょうか。

投稿2016/10/13 09:53

popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問