PHPの最近のブログ記事
本来CMSとはツールではなく、リアルも含めたマネジメントの仕組みのことらしいです。
『暇つぶしにCMSとかつくってみる』でつくるlことにしたCMS。
なんかそれっぽいのができた。でも浄化処理とかほぼしてない。メンドくさかったから。
とりあえず処理の流れとか、そんなんが知りたかったので。
JavaScriptとはちがうのだよ。JavaScriptとは。
なんかJavaScriptでは
var hoge = document.getElementsByTagName("tagname");
hoge[n].firstChild.nodeValue;
というように、hogeの中に配列(のようなもの)化されたデータが代入される。
けどPHPの方は
$hoge = $DOM -> getElementsByTagName("tagname");
$hoge -> item(n) -> nodeValue;
というように、$hogeにitem()でタグの番号を指定しないとでてこない。テキストノードは無視っぽい。けどノードの中にテキストをappendする場合はやっぱ、createTextNodeが必要。
テキストノードがとれない(っぽい)のでremoveChildがちと面倒。
なんかあんまり使われないものなのか、情報が少ない。ひとに聞いてみたりもして、なんとかかんとか。
getElementsByTagNameをしたいのだけれど、ルートからのTagNameはとれるけど、そのタグからまたgetElementsByTagNameしようとするとエラーになる。とれないのかしらん。
解決した。
getElementsByTagNameからgetElementsByTagNameとれた。
$node -> item(0) -> getElementsByTagName('tagname') -> item(0) -> nodeValue;
とりあえずルートからいっこいっこTagNameを取得して、なんとか取ってきたけど、なんかスマートじゃないのでどうかなとか思う。
//DOMオブジェクト生成
$document = new DomDocument('1.0');
//XML読み込み
$document -> Load('rss.xml');
//itemNodeを読み込み
$title_node = $document -> getElementsByTagName('title');
$description_node = $document -> getElementsByTagName('description');
$link_node = $document -> getElementsByTagName('link');
$files = array();
$array_title = array();
$array_description = array();
$array_link = array();
for ($i = 1; $i <= $title_node -> length; $i++) {
$array_title = $title_node -> item($i) -> nodeValue ;
$array_description = $description_node -> item($i) -> nodeValue ;
$array_link = $link_node -> item($i) -> nodeValue;
$files[$i] = array($array_title,$array_description,$array_link);
}
なんか、ちょこちょこつくっていけて、結構時間がかかって、ほいでいろいろ学習できるやつがやってみたかったので、CMSとかつくってみることにした。
とりあえず、最初のテスト用の設計が終わった。ほいじゃあこっからちゃんとつくるかって程度だけど。
xsl:sortでソートする対象をPHPで切り替えるという処理です。
ちょっとつまずいたのがxsl:sortに渡すselectの値。
ここはxsl:for-eachの文脈の中で処理されるらしく、単純にxsl:variableで変数を切り替えても処理されないっぽい。
なので仕方なく、XSLT側もPHPに変えて、XMLにリクエストされたGETの値でXSLTにリクエストされるGETの値を切り替えて、その値に応じてxsl:sortに渡すselectの値を切り替えるようにしたらうまくいった。
とりあえず、他に処理がうまくいかない理由が思いつかないのでたぶんそういうことだと思う。
GETの値をXSLTのパスに代入してるだけです。
if(isset($_GET['xsl'])){
$xslPath = $_GET['xsl'];
}else{
$xslPath = "table";
}
なんか正月にPHPをやるとかやないとか言ってたのを思い出して、なんとなくメールフォームを作ってみた。
htmlentitesで文字化けしてなかなか原因がわからなかったけど、ひとに教えてもらてなんとか無事解決。
しかし、あれよね、入門書って難しい、さっきまでprintしてたのに、いきなる複雑な処理をやらせようとするんで。
今まで買ったやつはtd td table tableの入れ子とかでもはや必要なPHPのコードがうもれてしまって書くのもメンドくさかったけど、これはわかり良かった。
説明もさすがO’REILLYといったとこで、理屈がちゃんと書いてあるので、「なんとくこう書いたらこうなるんだよ」みたいな他の本とは違う。まあひとにもよるんだろうけど、理屈はいいから動けばいい、みたいなひとはそういうのはかえってメンドイんだろうけふぉ。