-  |  次の10件 »

テンプレートエンジンの欠点

テンプレートエンジンはPHPで出来ていて、テンプレート記述ファイルを読み込んで処理し、動的にHTMLなどを出力していきます。

今回はこの事が大きな欠点になっていました。
つまり、HTMLを吐いても、それはHTMLファイルとして保存されないので、リンクなどは貼れないということになります。つまりパン屑リストなどで別ページなどへ移動するような処理を書きづらいことになります。

システム系の言語であれば、標準出力への書き込み部分をパイプという仕組みでファイルへ流すのも自由自在なんですが・・・
システムの持つ画面にも種類がありますが、標準出力とエラー出力です。

で、調べて行くとPHPにも標準出力への書き出しをバッファリングする仕組みがあるというのが解ったので、これを使って表示をファイル化します。

猫式

被リンク集スクリプト新規登録サイト処理完成です。

被リンク集は、ペンギン・パンダなどのアップデートに対応できる被リンク増殖スクリプトです。
まだ第一期バージョンの完成ではないのでもう少しかかりますが、新規登録サイトの処理にテンプレートエンジンの動作が追いついたので、これからは早いと思います。

このスクリプトをレンタルサーバーに置く事により、あるカテゴリのサイトの情報が送られ、送っていただいた方には、このサーバーからの被リンクが送れれる仕組みになります。
他、htmltemplate.incのPHP5対応を澄ませ配布していますが、繰り返しの処理も完全に動作することを確認しました。

サンプルを見ますか?

編集後記:htmltemplate.inc の中に、変数の表示処理の部分で余計な改行処理をしている部分があるのかテーブルに余計な業がでているようです。
どなたか修正できる方がいたら、修正のほど宜しくお願いいたします。
htmltemplateも熟成できたらと思いますので。

テンプレートエンジンの繰り返し処理に必要な多次元の連想配列

テンプレートエンジンの自作を考える時に、テンプレート変数の処理は簡単に出来ます。
PHPの関数のreplaceなどを使えば処理できるからです。
これらの単純な処理だけではどうしても実現できないのが繰り返しの要素です。

例えばテーブルを作成するようなことがテンプレートで必要で、テーブルの各要素になにか別な値を入れたいなどの用途には繰り返す処理がどうしても出てくるからです。
PHPの中からHTMLのタグを出力するのは簡単ですが、テンプレートのシステムは、あくまでもHTMLをそのまま処理したいわけです。テンプレートを作る人がPHPを知らなくても良いからです。

htmltemplate.incでは繰り返しを次の様な感じで書きます。
<!--{each hoge_loop}-->
{val hoge_loop/hogehoge}

<!--{/each}-->

このhoge_loopとhogehogeが配列の要素のキーになっています。
{val hoge_loop/hogehoge}は、配列に格納されている値を出力します。

で、問題はこの複雑な多次元配列をどう作るかですが・・・

$Dimension = array(
'hoge_loop' => array(
array( 'hogehoge' => '一回目です' ),
array( 'hogehoge' => '二回目です' ),
array( 'hogehoge' => '三回目です' )
)
);

とこんな感じのものになるでしょう。
少々変則な多次元配列で、2+2次元とでも言うものでしょうか。
$Dimension['hoge_loop'][0]['hogehoge'] = '一回目です';
$Dimension['hoge_loop'][1]['hogehoge'] = '二回目です';
$Dimension['hoge_loop'][2]['hogehoge'] = '三回目です';

と書く事で表現できるので、あり得ないものではないのです。
システム系の言語ではこういうことはなかなかしませんが
連想配列では十分に表現できる範囲です。

この表現を使えばHTMLのタグを繰り返したい数だけループで回すことが可能です。
実際には、配列に値がある限り繰り返すという内部処理になっています。




検索エンジンの大変革:インパクト0!が起きるかもしれない。

シンプルアフィリエイト講座の札幌未来工房からの引用です。

スーパーインパクト0・・・
それに比べると、ペンギンもパンダアップデートも単なる予告編に過ぎなかった・・・

ソーシャル軍団に押されるGoogleがとか言われますが、本当の理由はそうではないかもしれません。
確かに広告収益がソーシャル軍団に流れていて減益という話しもありますが、Googleを最も苦しめるものはネットの情報そのものです。

ご存知のように検索エンジンはクロールする事で、新しいサイト・ブログといった情報源のデーターを集めています。
1秒間にものすごい容量のDiskが増設されるほどの情報量が毎秒ふえているわけで、それは指数的数字となっているというものです。
つまり、利益の元になる情報そのものがデーターセンターにありそれらの維持管理に莫大な費用がかかっているわけです。

かなり前に、アフィリエイトなどによって増え続けていたブログの情報をデーターとして分離して、メインの検索情報の保存域を増やした事件があり、随分とブログアフィリエイターに影響を及ぼしたのを覚えている方も多いでしょう。

その後、モバイルサイトの情報、ブログの情報も新たなデータ保存として提供し、世界中にデーターセンターを増やし続けていますが、同時に
それは検索エンジンの維持にとっての毒でもある訳です。

そこで検索エンジンのエンジニアとしては、検索エンジンの利用者にとって不必要なサイト情報を排除したいと考えたでしょう。
スマホサイトなどが地球規模で急激に増加しつつある今検索エンジンのサービスを維持していくためには、ブログの時のように分離ではなく削除の必要性もあるかもしれません。

こうなると影響は大きなものになりますね。
いままで必要悪的に見逃されていた、SEOの定石のバックリンク用のサテライトサイトなどすべて排除対象になりますね。中古ドメインの意味のないバックリンクも中古になった時点で削除です。
この程度は今まで出来なかったのではなく、しなかったと考える方が自然です。
サイトはネット上にあってもいいんです。ただ、Googleの保存しているデーターの中から削除されるわけです。文句の付けようもありません。

無駄と思われるデーターを削除すれば大きく保存域を確保でき、検索エンジンの利用者に必要とされるコンテンツのみを残し提供するという本来の役割に戻るのかもしれません。

おそらく、良質のコンテンツを判断するアルゴリズムが被リンク・バックリンク以外の方法で確立したのかもしれません。

こうなると、ネットビジネスに大きく変化が起きるでしょう。
変革と言っても良いかもしれません。

今まで定石と言われたSEOが過去のものになるかもしれません。

この予想が当たらない事を祈りますが、いずれはしなくてはならない事と考える方が良いと思います。

世界中に優秀なエンジニアを抱える検索エンジンの企業なんですから。

コード空間

リンカーで、同じコード空間にプロシージャーを集めて結合する言語とは違い、スクリプトはファイルのスクリプトソース単位で読み込んで翻訳しながらスクリプトのコード空間で実行していくために、
他のファイルの関数などを実行するという概念が無い。

つまり、必要な機能は関数化した場合、同じファイル内に置くか、インクルード、あるいはリクワイアという機能でそのファイルの中に読み込むしかない。

そこでファイル単位で処理を記述している場合、他のファイルに実行ポインタを切り替え対場合どうするかだが・・・
実行をコントロールしているブラウザにあらためてファイルを読み直してもらうしか無いと思われる。

そこでブラウザにリダイレクトの命令を出すと良いことになる。

PHPの場合、header()が便利なのでこれを使う

こんな感じ:
hogehoge.phpに実行を映したい場合
header("Location: hogehoge.php");
で切り替える。
システム系の言語であれば、こんな方法はスタックなどが心配で良いコードとは言えないが、スクリプトの場合、メモリ管理がしっかりしているので、大丈夫なのかもしれない。

includeによる方法なら、同じページ空間になるので安全なのかもしれないが・・
ロケーションや、HTMLファイルの切り替えならheader()しかない。


htmltemplate.incのPHP5バージョンを更新しました。

繰り返し処理のサンプルがうまく動作しない方もいたかもしれません。
スクリプトのphp記述が抜けていたために、動作不良になっていました。

ブラウザにphpのスクリプトがずらずらっと出力される現象がそうです。

修正版:以下のリンクから直にダウンロードできます。
htmltemplate_oo5.zip

注)相変わらずワーニングの除去はしていません。どなたかできた方、更新処理しますのでできた方がいらっしゃいましたら、ご連絡をお願いします。
ワーニングをはっきり確認する方法ですが、XAMPPなどで動作確認すると表示されると思います。


CSSの基礎1

CSS
ホームページはHTMLを覚えるだけでは不十分で、スタイルシートを読めないと困る事が多い。
とくにテンプレートを利用するときに、一部手直しなどする場合にはとくに読めないとどうしようもないことが多い。

スタイルシートの基礎中の基礎として、スタイルシートの中で使われる単位について最初は知っておく必要がある。

単位には次のようなものがある。

cm  表示文字などの大きさをcmやmmで指定できる。
pt  同じく文字などの大きさをポイントで表示
em 指定されているフフォントの大きさを1としたときの相対的なサイズ指定
   例 h1{ font-size : 1.5em;} <ーフォントサイズの1.5倍の大きさ
px 文字の大きさをピクセル数で指定
%  現在の大きさに対する割合で指定
   例 h1{ font-size : 150%;}

以上 様々な場面で単位が出てくるので暗記事項

htmltemplate.incのPHP5に対応修正しましたので広く配布します。

現在作成中の、被リンクおたすけスクリプトの最終部分にて
どうしてもテンプレートエンジンが必要でした。

Smartyという選択もありますが、これだとレンタルサーバーに
インストールする必要が出てきますので、避けることにしました。
シンフォニーだと、同様の理由もありますし、フレームワークなので巨大すぎます。

そこで自作の方向で考えていましたし、かなり実験もしていましたが
かつてPHP4の時代に、軽めのエンジンがあったことを思い出しました。

それがhtmltemplate.incです。
軽い・高速・扱いが楽などのメリットが大きいので
今回これをPHP5で使えるように少し修正しようと思い至った次第です。

もともとの作者様は、開発を止めていますので、現在入手可能な最新版の
PHP4対応のものをベースに修正しています。

インスタンス周辺と、正規表現の関数周りの致命的なエラーはとってあります。
しかし、ワーニングがあるかもしれませんので、各人で修正したら、この記事
までご連絡いただければと思います。修正版を再配布します。

オリジナルの作者様の著作権を守って、ドキュメントはそのままに配布します。
つまり、htmltemplate.incとPDFのリファレンス以外はオリジナルのままです。
タグサンプルプログラムも修正しお付けしました。

再度改良され、今後も配布され続けますように♬

ダウンロードは↓からできます。
htmltemplate_oo5.zip

お役にたつようでしたら、このブログへのどのページであってもリンクされて構いませんのでよろしくお願いいたします。

長靴猫

PHPのデバッグをプロっぽくするには

C言語にあって、PHPに無いものの代表が、プリプロセッサだ。
#if,#ifdef などを上手に使うと高度なデバッグが出来る。

ソースデバッグというよりも、扱うデーターが正しいかどうかなどの場合には、
プロは、ソースでバッグを使わない。
旧来のprintfでバッグなわけだ。でもソース中に数多くのデバッグプリントをバラまいていると
後々消すのが大変になる。

そこでプリプロセッサをつかって、一気に消す(というより機能させない)わけだ。

Cならばこんな感じだ。
#define DEBUG

#ifdef DEBUG
printf("これはデバッグ用の表示です〜♪¥n");
#endif

こんなに便利な機能がPHPには無いので。
無ければ作るしかない。しかしプリプロセッサを組込みはできないので
代用品を考える。。

こんな感じだろう。

function Debug() // 可変引数
{
if (defined('DEBUG'))
{
$args = func_get_args();
foreach( $args as $key => $value )
print $value.'<br>';
}
}

これで、define( "DEBUG","1") を後々コメントアウトすれば一気に消せる。

型のチェックはスクリプトでは重要かもしれない

C言語系のシステム記述言語では、変数やそれに格納されている数値は明確に型が決まっています。
なぜなら、型の宣言をしないと使えないからです。

でもPHPなどは、いきなり変数を使えますし、それゆえに、どんな値でも格納してしまうので、それが文字なのか数値なのかさえわからなくなることが多々あるのです。

したがって、それが数値だと思ったら実は文字列だったなんてことがあるわけです。

たとえば、$hensu には、1が格納されていると思い込んでいて・・・
1-$hensu という式の結果を0になることを期待していたら、マイナスになった。。何て事が起こります。
もしIF文の中で判定していたら、偽ではなく真の状態になるわけです。

こういう間違いを犯さないようにするには、解らない変数を判定などで使う前に、型のチェックをすることは大事かもしれませんね。

gettype
string gettype(mixed var)
引数に指定した変数に現在設定されている型を返します。

引数:
var 調べる変数。
返り値:
型を表す文字列。取り得る値は以下のどれかとなります。
boolean
integer
double
string
array
object
resource
null
unknown type

こんな便利な機能があるので使いましょう。
って、ある意味が解った次第。



-  |  次の10件 »
Copyright © アフィリエイターの為の野良プログラミング入門 All Rights Reserved.
当サイトのテキスト・画像等すべての転載転用、商用販売を固く禁じます

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。