cakephp2.doc_084
最終投稿日:2019年11月20日
CMSシステム等で使われる「ファイルの生成」サンプルです。
仕様としては、「レイアウト」「テンプレート」を選択し、
お好みの画像とメッセージを特定のディレクトリに HTML ファイルとして生成する。
+-------------+
| | コンテンツ選択
| [cms_index] | レイアウト選択
| |
+-----+-------+
|
+-------------+
| |
+-----+-----+ +-----+-----+
|【Layouts】| |【Layouts】| 指定されたレイアウトを使用
| [cms1] | | [cms2] | (css JS 等を読込み)
+-----+-----+ +-----+-----+
| |
+-------------+
|
+-----+--------+
| 【View】 | 指定されたテンプレートを振り分けるビュー
| [cms_create] |
+-----+--------+
|
+-------------+
| |
+-----+-----+ +-----+-----+
|【Layouts】| |【Layouts】| 実際にレンダリングするエレメント
| [cms1] | | [cms2] |
+-----------+ +-----------+
保存するディレクトリは、以下の公開ディレクトリとなります。
[Webroot]/cake2612/tmp_dir/[コンテンツ名]/top_page.html
※サンプルでは、ファイル名は固定となります。また、保存するディレクトリは、確認用としています。
実際は、本番アップ用のディレクトリ等にファイルを移動する仕組みの追加が必要です。
※ファイルの保存に自作 Component 『MyImageControlleComponent』を使用しています。
【View】
[ cms_index ]
<!-- 項目 content 保存ディレクトリ -->
<!-- 項目 template 使用テンプレート -->
<?php echo $this->Form->create(
"Mysample",array("action"=>"cms_confirm","enctype"=>"multipart/form-data")); ?>
<?php echo $this->Form->input("content",array(
"type"=>"select","label"=>"コンテンツ","options"=>$content)); ?>
<?php echo $this->Form->input("template",array(
"type"=>"select","label"=>"テンプレート","options"=>$template)); ?>
<?php echo $this->Form->input("title",array("type"=>"text","label"=>"タイトル")); ?>
<?php echo $this->Form->input("image",array("type"=>"file")); ?>
<?php echo $this->Form->textarea("message",array("cols"=>"40" ,"rows"=>"5","label"=>"")); ?>
<br /><br />
<?php echo $this->Form->end("確認"); ?>
[ cms_confirm ]
確認画面
保存場所:<?php echo $content; ?>
<br />
使用テンプレート:<?php echo $template; ?>
<br />
ページタイトル:<?php echo $this->data["Mysample"]["title"]; ?>
<br />
以下ページ内容<br />
--------------------------------------------------------------------------------------------<br />
<?php echo $this->element("create_content/".$template); ?>
<br />--------------------------------------------------------------------------------------------
<?php echo $this->Form->create(
"Mysample",array("action"=>"cms_complate")); ?>
<?php echo $this->Form->input("content",array("type"=>"hidden")); ?>
<?php echo $this->Form->input("template",array("type"=>"hidden")); ?>
<?php echo $this->Form->input("title",array("type"=>"hidden")); ?>
<?php echo $this->Form->input("message",array("type"=>"hidden")); ?>
<?php echo $this->Form->input("image",array(
"type"=>"hidden","value"=>$this->data["Mysample"]["image"]["name"])); ?>
<?php echo $this->Form->end("生成"); ?>
[cms1]※生成に使用する Layouts
<!DOCTYPE html>
<html>
<head>
<?php
echo $this->Html->charset("UTF-8");
echo '<meta http-equiv="X-UA-Compatible" content="IE=edge">';
echo '<meta name="viewport" content="width=device-width, initial-scale=1">';
?>
<title>
<?php echo $this->fetch('title'); ?>
</title>
</head>
<body>
<?php echo $this->fetch('content'); ?>
</body>
</html>
[cms2]※生成に使用する Layouts
<!DOCTYPE html>
<html>
<head>
<?php
echo $this->Html->charset("UTF-8");
echo '<meta http-equiv="X-UA-Compatible" content="IE=edge">';
echo '<meta name="viewport" content="width=device-width, initial-scale=1">';
echo '<link rel="stylesheet" type="text/css" href="../../css/bootstrap.min.css" />';
echo '<!--[if lt IE 9]>';
echo $this->Html->script('https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js');
echo $this->Html->script('https://oss.maxcdn.com/respond/1.4.2/respond.min.js');
echo '<![endif]-->';
echo '<script type="text/javascript" src="../../js/jquery.min.js"></script>';
echo '<script type="text/javascript" src="../../js/bootstrap.min.js"></script>';
?>
<title>
<?php echo $this->fetch('title'); ?>
</title>
</head>
<body>
<?php echo $this->fetch('content'); ?>
</body>
</html>
[cms_create]
<?php echo $this->element("create_content/".$template); ?>
[template1]※生成する Body 部分
<div style="width:200px;">
<?php echo nl2br($this->data["Mysample"]["message"]); ?>
</div>
<div style="width:400px;">
<?php if($this->action == "cms_confirm"): ?>
<?php echo $this->Html->image("/img/tmp_image/".$image); ?>
<?php else: ?>
<?php echo $this->Html->image("/img/tmp_image/".$image); ?>
<?php endif;?>
</div>
[template2]※生成する Body 部分
<div style="width:300px;" class="alert alert-success">
<?php echo nl2br($this->data["Mysample"]["message"]); ?>
</div>
<div style="width:400px;">
<?php if($this->action == "cms_confirm"): ?>
<?php echo $this->Html->image("/img/tmp_image/".$image); ?>
<?php else: ?>
<?php echo $this->Html->image("/img/tmp_image/".$image); ?>
<?php endif;?>
</div>
[cms_complate]
URL確認<br />
<a href="<?php echo $url; ?>" target="_blank"><?php echo $url; ?></a>
【Controller】
<?php
App::uses('AppController', 'Controller');
App::uses( 'File','Utility');
class MysamplesController extends AppController {
public $name = "Mysamples";
public $uses = array("Mysample");
public $components = array("Session","MyImageControlle");
public $helpers = array('Html', 'Form');
private $myContent = array("1"=>"syumi","2"=>"job");
private $myTemplate = array("1"=>"template1","2"=>"template2");
function beforeFilter(){
parent::beforeFilter();
if($this->action != "cakephp_index"){
$this->set("fadeInRender",false);
}
}
function cms_index(){
//コンテンツの配列をセットする
$this->set("content",$this->myContent);
//テンプレートの配列をセットする
$this->set("template",$this->myTemplate);
}
function cms_confirm(){
$this->Mysample->set($this->request->data);
//画像が選択されていれば特定のディレクトリへ保存
if(!empty($this->request->data["Mysample"]["image"]["name"])){
$tmp_path = "/home/hoge/www/cake2612/img/tmp_image/";
$this->request->data["Mysample"]["image"] = $this->MyImageControlle->
imageSaveTmp($this->request->data["Mysample"]["image"],$tmp_path);
}
//コンテンツ名をセット
$this->set("content",$this->myContent[$this->request->data["Mysample"]["content"]]);
//テンプレート名をセット
$this->set("template",$this->myTemplate[$this->request->data["Mysample"]["template"]]);
//画像名をセット
$this->set("image",$this->request->data["Mysample"]["image"]["name"]);
}
public function cms_complate(){
//デバッグモードを 0 にする
Configure::write('debug', 0);
//使用するテンプレート振り分け
if($this->request->data["Mysample"]["template"] == 1){
$this->layout = 'cms1';
}else{
$this->layout = 'cms2';
}
$this->Mysample->set($this->request->data);
//コンテンツ名をセット
$this->set("content",$this->myContent[$this->request->data["Mysample"]["content"]]);
//テンプレート名をセット
$this->set("template",$this->myTemplate[$this->request->data["Mysample"]["template"]]);
//画像名をセット
$this->set("image",$this->request->data["Mysample"]["image"]);
//title タグをセット
$this->set("title_for_layout",$this->request->data["Mysample"]["title"]);
//エレメントを振り分ける View をレンダリングし、変数へ格納
$content = $this->render("cms_create");
//不要かも
$this->output = null;
//ページ名設定
$filename = "top_page.html";
//保存ディレクトリ指定
$dir = "/home/hoge/www/cake2612/tmp_dir/".$this->
myContent[$this->request->data["Mysample"]["content"]]."/";
//File クラスを使用してファイルを保存
$file = new File($dir.$filename);
$file->write($content);
//確認用ページを表示するため
$this->autoRender = true;
//title タグをセット
$this->set("title_for_layout",$this->name);
//確認用レイアウトセット
$this->set("url","http://hoge.sakura.ne.jp/cake2612/tmp_dir/".$this->
myContent[$this->request->data["Mysample"]["content"]]."/".$filename);
$this->render("cms_complate");
}
}
?>