Googleドキュメントのテキスト文書をSmartyのテンプレートに利用する

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

Googleドキュメントにアップロードしたテキストファイル(文書)を、PHPのSmartyテンプレートとして利用すると便利です。

  • オンライン・コード・エディタ
    Smartyテンプレートの編集がGoogleAppsやGMailのGoogleドキュメント上で出来るようになる。
  • バージョン管理
    「変更履歴を表示」すればバージョン管理も出来るので、版を戻すこともできる。
  • 簡易CMSの構築
    Googleスプレッドシートと併用すれば、GoogleAppsやGMailベースのCMSに利用できる。
■開発のポイント

公開されたGoogle文書のソースを見るとわかりますが、本文データはUTF-8でHTMLエンティティ化(エンコード)されています。開発のポイントとしては、ソースからテンプレートとなる必要箇所を抜き出し、デコードした文字列データをSmartyのテンプレートとして利用する点です。

テンプレートとなる文字列データを、Smartyのテンプレートとして使う場合、register_resource関数を使う「Smartyで文字列テンプレート」などの方法がありますが、問題として変数をテンプレートに渡せないなどがあります。

簡単な方法としては、Smartyオブジェクトにテンプレートとなる文字列データもassignして(渡して)しまい、テンプレート内でeval関数を用いて置換処理したものを表示させる方法がおすすめです。

ちなみにデメリットとして、テンプレートのインクルードが出来ないなどあります。

■テンプレートの中身

アップするGoogle文書のサンプルです。

<template>
<html>
<head>
    <title>Sample Title</title>
</head>
<body>
<h1>{$sample}</h1>
</body>
</html>
</template>

上記のようなテンプレートとなる内容のテキストファイルを作成し、Googleドキュメントにアップした後、「共有」からウェブページとして公開します。

※ここでのポイントはtemplateタグで囲っていること。

■sample.phpの中身

表示用のスクリプトの中身です。

<?php
//Googleドキュメント文書の公開URL
$sURL  = "http://docs.google.com/View?id=dd5xxxxxx978vct";
/* ==================================
    文書からテンプレート部を抜き出す
   ================================== */
//データの読み込み
$sTemplate = file_get_contents( $sURL );
//BODYタグ内(テンプレート部分)だけを抜き出す。
if( preg_match_all( "/<body\s.*>([\s\S]*)<\/body>/i", $sTemplate, $matches ) ){
$sTemplate = $matches[0][0];
}
//HTMLエンティティ化されていないタグを削除 ※テンプレート上のタグはHTMLエンティティ化されている為
$sTemplate = trim( strip_tags( $sTemplate ) );
//HTMLエンティティ化されているUTF-8文字をデコード
$sTemplate = mb_decode_numericentity( $sTemplate, array( 0, 0xffff, 0, 0xffff ), "UTF-8" );
//HTMLエンティティ化されているタグ類をデコード
$sTemplate = html_entity_decode( $sTemplate );
//templateタグ内のデータだけを抜き出す
if( preg_match_all( '/<template>([\s\S]*)<\/template>/i', $sTemplate, $matches ) ){
$sTemplate = $matches[1][0];
}
/* ==================================
    Smarty処理
   ================================== */
//Smartyオブジェクトの生成
$oDocument = new Smarty();
//テンプレート用変数データの割り当て
$oDocument->assign( 'sample', 'this is a sample text' );
//取得したテンプレートの文字列データもテンプレート変数として割り当て
$oDocument->assign( 'buffer', $sTemplate );
//データを流し込んで表示
$oDocument->display( "buffer.tpl" );
?>

使いやすいようにURLを渡すだけで、テキストとして返してくれる関数を作りました。→ file_get_googletext( $sURL );

■buffer.tplの中身

Smartyテンプレートディレクトリに置くファイルの中身です。$bufferにテンプレートの文字列データが入っているので、Smartyのeval関数でパースします。

{eval var=$buffer assign="parsedBuffer"}{$parsedBuffer}

関連記事

Google ドキュメントを活用したCMSの構築... CMSのマッシュアップ?! Web開発をしていると、Webサイト構築に当たって、お客さん(クライアント or システムのエンドユーザー)がいかに更新してくれるかに頭を悩ませることが多々あります。 そこで、手軽に更新するためのコンテンツ管理システム(以下CMS)として、Googleドキュメント...
Documents List Uploader: DropBox for Google Docs? "Documents List Uploader"は、Google DocumentsにファイルをアップロードするGoogle製のアップロード・ツールです。GMail、GoogleAppsのどちらのアカウントでも使えます。 結論から言うと、シンプルで便利ですが、DropBox程の使い勝手はあり...
DropBox for GoogleAppsを求めて インターネットカフェなどさえあれば、PCを持ち歩かなくても仕事ができる環境を求めているアチキとしては、DropBoxを便利に使っているのですが、残念ながら現在のところGoogleDocsとは同期できません。(2010/08/15現在) 出来ればGoogleDocs内に"DropBox"というフ...
Google DriveのDocsを全画面表示するURL(クエリ)オプション... Googleドキュメント共有時の全画面表示URLの作り方 Google AppsやGMailのドライブ(Google Drive)にアップロードしたドキュメントをメニュー無しの全画面表示をするためのURLの作り方ですが、共有URLのクエリ(URLのアドレスの最後)に下記を加えると、全画面表示に...

スポンサーリンク
レクタングル(大)広告

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
スポンサーリンク
レクタングル(大)広告