ブログ・エス技研

当ブログは引越しをしました。10秒後に自動で転送しますが、転送されない場合は、http://blog.s-giken.net/ をご覧ください。
ブログ・エス技研 TOP  >  2013年10月

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --年--月--日 --:-- ] カテゴリ:スポンサー広告 | TB(-) | CM(-)

CakePHP 2.3で PDFを作成する方法を調査「mpdf」「TCPDF」「FPDF」

CakePHPから PDFを出力する方法を調べてみましたので、そのレポートをお送りします。

CakePHPに限るわけではありませんが、CakePHP2.Xから PDF出力する方法は、「mpdf」「TCPDF」「FPDF」といったいくつかのライブラリがあるようでしたが、「http://cakephpmemo.blogspot.jp/2013/02/cakephppdf.html」この記事を読んで、TCPDFで実装をしてみることにしました。

とはいえ、上記のサイトでは初心者の私では何を言っているのかわからなかったため、実際に参考にしたサイトは、下記のサイトです。

http://prg.pro-mame.com/index.php?php%2F%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%2FCakePHP2.X%2FTCPDF

このサイトを上から順番に確認してそのまま対応していくと、たぶん問題なく PDFの出力について理解できると思います。
フォントを変える方法なども解説されていますので、実運用に向けてもかなりの参考になるでしょう。

また、インスタンスを生成する(クラスに初期値を設定する)際に設定する各項目と、その値は下記の様になっているようです。

PDF_PAGE_ORIENTATION:用紙の向き[P=縦方向、L=横方向] デフォルトはP
PDF_UNIT:処理単位[pt=ポイント、mm=ミリメートル、
     cm=センチメートル、in=インチ] デフォルトはmm
PDF_PAGE_FORMAT :ページフォーマット ( デフォルトは A4 )
※上記は /tcpdf/config/tcpdf_config.php ファイルで定義されています。


また、最初の 2つのサンプルでは、PDFの情報として、「Cell」「text」でテキストの位置と情報を与えています。
いずれも、最初の数値が横軸の座標値を表し、2個目の数字が縦軸の座標を表しています。「Cell」「text」の違いは、「text」が座標の絶対値で設定されるのに対し、「Cell」は相対値(??)で設定されるようです....

--------------
$pdf->Cell(10, 10, '日本語テスト');
$pdf->Cell(30, 30, 'Hello World' );
--------------
--------------
$pdf->text(10, 10, '日本語テスト');
$pdf->text(30, 30, 'Hello World' );
--------------


また、PDFのページデザインに関しては、Cell、textといった方法ではなく、HTMLで情報を渡す方法もあります。
実際は、こちらの HTML形式で整形していく方法を取られるのだと思いますが、実際に PDF出力をさせるページを作るとなると、しっかりした HTML(css)のコーディングが必要になりますので、結構骨が折れるでしょうね。


mpdf
http://d.hatena.ne.jp/okinaka/20111103/1320287622
http://blog.syuhari.jp/archives/1992

また、mpdfで作成する場合は、上記のサイトが参考になるのではないかと思います。

また、TCPDF、FPDFに関しては、下記のページも参考になるかと思います。
http://bakery.cakephp-users.jp/2011/02/05/creating-pdf-files-with-cakephp-and-tcpdf/
スポンサーサイト
[ 2013年10月28日 08:03 ] カテゴリ:CakePHP 2.x | TB(0) | CM(0)

baserCMS 詳細エリアが入力できない(詳細エリアの WYSIWYGエディタが起動しない)

baserCMSをインストールしただけなのに、最初から本文、詳細エリアの入力エリアが表示されない、という不具合がありました。
これについては、下記のように同じように不具合を抱えていた方がいたようで、下記の通りの質問と解決策を示している方がありました。

http://forum.basercms.net/modules/newbb/viewtopic.php?topic_id=303&forum=4
http://basercms.net/develop/archives/9

また、ロリポップのサイトの下記、簡単インストールの 3番のところにも【php.ini設定の変更が必要な場合】として説明がされていました。
http://lolipop.jp/manual/user/applications-bc/


ですが、私の環境では「internal_encoding」を変更しても「default_charset」を変更しても直りませんでした。
JavaScriptの処理が問題となっているならば、と思い、ブラウザを変更してみましたが、それでも直りませんでした。
また、PHPのバージョンを 5.2から 5.4にバージョンアップ行ってみましたが、それでも無理でした。
(おそらく、PHPのバージョンはこの問題とは関係ないと思われますが、ロリポップの php.iniの設定に関しては、バージョンが変わると変更できる項目も変わるため、それによって影響がないとも言い切れないところだと思われます。)


ところが、Basic認証の設定のために baserCMSが動かなくなってしまったため、仕方なく再インストールし直してみたところ、今度は「internal_encoding」が設定されていないにもかかわらず、本文エリアの入力エリアが表示されるようになっていました。


単純に PHPの設定を変更しただけでは直らない場合もあるようです。
その場合は、手間にはなりますが、ブラウザのキャッシュを削除する、baserCMSを再インストールし直す、といったことを試してみる必要がありそうです。


あまり、はっきりと「これです!」という原因を追究するレポートにはなっておらず申し訳ありません...
[ 2013年10月22日 12:44 ] カテゴリ:baserCMS | TB(0) | CM(0)

baserCMS ブログカテゴリーの表示を柔軟な形で取得する方法

getCategoryListで取得した場合は、固定の HTMLが返ってきますが、それをもう少し柔軟な形で取得したい場合は、下記のサイトが参考になります。
http://www.guilz.org/2012/01/08/basercms-%E3%83%96%E3%83%AD%E3%82%B0%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E3%83%BC%E8%A1%A8%E7%A4%BA%E3%82%92%E4%BB%BB%E6%84%8F%E3%81%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%A8%E3%81%8B/

しかし、このサイトを見ただけでは何がなんだかよく分かりません!
なぜなら、PHP、HTMLで書かれているソースの部分が正しく表示されていないからです。

このページのソースを表示させると何が書かれているかわかりますが、PHPのソース、HTMLのソースの記述部分がブログの中のタグと混同してしまっておかしな見え方になってしまっています。

また、そのままではいくつかエラーが起こったために、下記のように修正をしました。
これをこのまま表示させる Viewファイルに記述してもらえれば OKです。
私の場合は、ブログの「nada-icons」というテーマの「news」というテンプレートを使っていましたので、「/baserCMS/app/webroot/themed/nada-icons/index.php」に追記しました。

それぞれページによって表示のさせ方も違うと思いますので、「<!-- ここからコード出力 -->」の部分を修正していただきながら、ページごと必要な項目を調整してもらえれば、と思います。

---------------------------------

<?php echo '-------------aaa' ?>
<?php if(!isset($count)) { $count = true; //ここは好みで false に } if(isset($blogContent)){ $id = $blogContent['BlogContent']['id']; }else{ $id = $blog_content_id; } if($count) { $actionUrl = '/blog/get_categories/'.$id.'/1'; } else { $actionUrl = '/blog/get_categories/'.$id; } $data = $this->requestAction($actionUrl); $categories = $data['categories']; $this->viewVars['blogContent'] = $data['blogContent']; $baseCurrentUrl = $blogContent['BlogContent']['name'].'/archives/category/'; $view_count = 0; ?>
<?php if($categories): ?>
    <?php foreach($categories as $category): ?> <?php if($count && isset($category['BlogCategory']['count'])): ?> <?php $category['BlogCategory']['title'] .= '('.$category['BlogCategory']['count'].')' ?> <?php endif ?> <?php if($this->params['url']['url'] == $baseCurrentUrl.$category['BlogCategory']['name']): ?> <?php $class = 'active' ?> <?php else: ?> <?php $class = 'none' ?> <?php endif ?> <?php if($view_count): ?> <?php $title = $category['BlogCategory']['title'].' ('.$category['BlogCategory']['count'].')' ?> <?php else: ?> <?php $title = $category['BlogCategory']['title'] ?> <?php endif ?> <?php $bcBaser->link(''.$title.'', array( 'admin' => false, 'plugin' => '', 'controller' => $blogContent['BlogContent']['name'], 'action' => 'archives', 'category', $category['BlogCategory']['name'] ), array('title'=> $title, 'class'=> $class)) ?> <?php endforeach; ?>
<?php endif; ?>

<?php echo '-------------xxx' ?>
---------------------------------------
[ 2013年10月15日 12:39 ] カテゴリ:baserCMS | TB(0) | CM(0)

baserCMS getCategoryの使い方について

baserCMSにはいろいろな関数が用意されていますが、その中の「getCategory」についての使い方の詳細です。

getCategory
http://basercms.net/reference_2/archives/16

上記サイトに説明はありますが、通り一辺倒な説明だけですので、

  第一引数の
  $post:ブログ記事のデータを指定します。ブログ記事を出力するループ内では「$post」と記述すれば動作します。

とありますが、ループの外で「$post」に代わる引数を指定したい場合はどうするの?と思いましたので、それを記述しておきます。


下記のように記述すれば情報を取得できます。IDがなくてもカテゴリ名を表示させることはできますが、リンクが正しく設定されません。

-------------------------------------
$bbb = Array(
    'BlogCategory' => Array
        (
            'id' => '2',
            'name' => '2013',
            'title' => '2013',
        ),
);
-------------------------------------

プログラムソースを丹念に追えば分かりはしますが、それではエンジニア以外のユーザが増えませんからね。
多くの方が使ってくれて、この baserCMSがもっともっとメジャーになってくれればいいなぁ、と思いながら書いています。
[ 2013年10月09日 12:33 ] カテゴリ:baserCMS | TB(0) | CM(0)

baserCMS getCategoryListの使い方について

baserCMSにはいろいろな関数が用意されていますが、その中の「getCategoryList」についての使い方の詳細です。

getCategoryList
http://basercms.net/reference_2/archives/45

上記サイトに説明はありますが、通り一辺倒な説明だけですので、

  第一引数
  $categories:カテゴリーデータをCakePHPのモデル形式の配列で指定します。

と書かれているものの、「カテゴリーデータのCakePHPのモデル形式」って何???
と思いましたので、実際に使ってみての説明をしてみたいと思います。


具体的に下記のように設定すれば、指定の IDのカテゴリを取得できます。

-------------------------------------
$bbb = Array( 
  '0' => array ( 'BlogCategory' => 
                  array ( 'id' => 2,
                          'name' => 2013,
                          'title' => 2013, 
                        )
                 ),
  '1' => array ( 'BlogCategory' => 
                  array ( 'id' => 3,
                          'name' => 2012,
                          'title' => 2012, 
                        )
                 ),
            );
-------------------------------------

「id」で指定したレコードの情報を取得し、リンク先を設定します。
また、「title」で指定された内容が表示項目になります。
「name」で指定した内容は反映されるところはありませんが、項目がない、nullだと項目が表示されませんので、何かしらの値を設定しておく必要があります。(通常は、「title」と同じ値を設定します。)

ただ、この方法だと指定するカテゴリの id、name、titleが分かっていないと指定できません。
そこで、下記のような形で指定することで特定のカテゴリに属するカテゴリをすべて取得することもできるようになります。

-------------------------------------
$id = 2;
$limit = 0;
$view_count = 0;
$depth = 2;

$actionUrl = '/blog/blog/get_categories/'.$id.'/'.$limit.'/'.$view_count.'/'.$depth;
$data = $this->requestAction($actionUrl);
$categories = $data['categories'];

$aaa  = $blog->getCategoryList( $categories , 3 , false );
-------------------------------------

「$id」は、「bc_pg_blog_categories.blog_content_id」。
「$limit」は、取得する件数の指定。「0」の場合は、無制限。
「$depth」は、子のカテゴリをどこまで取得するか。「1」は親カテゴリのみ。「2」は1階層目の子カテゴリまで。

「$view_count」は、そのカテゴリに属するレコードが何件かを表示するか、しないかのフラグで、「true/false」or「1/0」を指定するものだと思われます。(私の環境ではうまく動きませんでした。)

その他「$contentType = 'year';」を設定することができるようですが、これに関しては細かく確認をしていません。
[ 2013年10月02日 12:31 ] カテゴリ:baserCMS | TB(0) | CM(0)
プロフィール

エス技研

Author:エス技研
性別:男性
職業:Web系エンジニア
エンジニアになって 15年ほど経ちますが、その途中で 5年ほどディレクタ、マネジメントを中心とした業務を行っていたためにやや現場を離れていましたが、転職をきっかけに 2012年に現場に復帰し、新たな技術を楽しみながら勉強しています。
メインの環境は LAMP環境です。

FC2ブログランキング
FC2カウンター
FC2拍手ランキング
GoogleAdWords
カレンダー
09 | 2013/10 | 11
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
検索フォーム
ブロとも申請フォーム
QRコード
QR
フリーエリア


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。