前提・実現したいこと
HTMLのheadタグをsmartyのincludeを使って共通化したい。
その際、headタグのtitleはファイルごとに変更できるようにしたい。
ここに質問の内容を詳しく書いてください。
headタグをincludeし、エラーメッセージが発生するか確認のためブラウザ表示させ試したところ、smartyが呼び出せてないエラーが発生しました。
include、titleへの代入の仕方に誤りがあるかと思いますので、ご指摘いただけると助かります。
発生している問題・エラーメッセージ
Fatal error: Uncaught --> Smarty: Unable to load template 'file:.tpl' in '../smarty/templates/err.tpl' <-- thrown in /Applications/MAMP/Smarty-master/libs/sysplugins/smarty_internal_template.php on line 195
該当のソースコード
login_check.php
php
<?php require_once '../db_connect/db_connect.php'; require_once '../common/common.php'; $reg_str = "/\A[a-z\d]{6,50}+\z/i"; if ($_POST['email'] == '') { $err['email'] = 'メールアドレスが入力されていません。'; } elseif (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { $err['email'] = 'メールアドレスを正しい形式で入力してください。'; } else { $user_email = $_POST['email']; } if ($_POST['pass'] == '') { $err['pass'] = 'パスワードが入力されていません。'; } elseif (!preg_match($reg_str, $_POST['pass'])) { $err['pass'] = 'パスワードは半角英数字6~50文字で入力してください。'; } else { $user_pass = $_POST['pass']; } try { $sql = 'SELECT * FROM users WHERE email = ?'; $stmt = connect()->prepare($sql); $data[] = $user_email; $stmt->execute($data); $dbh = null; $rec = $stmt->fetch(PDO::FETCH_ASSOC); if (isset($rec['password'])) { if (password_verify($user_pass, $rec['password'])) { session_start(); $_SESSION['login'] = 1; $_SESSION['user_email'] = $user_email; $_SESSION['user_pass'] = $user_pass; $_SESSION['user_name'] = $rec['name']; header('Location:../public/list.php'); exit(); } else { $err['mis'] = 'パスワードが違います。'; } } else { $err['mis'] = 'メールアドレス又はパスワードが違います。'; } } catch (Exception $e) { err_common($e, $smarty); } $smarty->assign('title', "エラー"); $smarty->display('../smarty/templates/head.tpl'); $smarty->assign('err', $err); if (isset($err)) { $smarty->display('../smarty/templates/err.tpl'); }
head.tpl
tpl
<head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" href="../../public/css/common.css" /> <title>{$title}</title> </head>
err.tpl
tpl
<!DOCTYPE html> <html lang="ja"> {include file="head.tpl" title=$title} <body> {if isset($err['mis'])} {$err['mis']} {/if} </body> </html>
試したこと
・includeの記述見直し
→{include file="head.tpl"}から{include file="head.tpl" title=$title}に修正。
補足情報(FW/ツールのバージョンなど)
まだ回答がついていません
会員登録して回答してみよう