各ドキュメントのエイリアス名を配列として取り込みたい  【解決済み】

質問全般・改善要望
返信する
toshi
メンバー
メンバー
記事: 12
登録日時: 2010年7月28日(水) 22:38

各ドキュメントのエイリアス名を配列として取り込みたい  【解決済み】

投稿記事 by toshi »

初歩的な質問ではずかしくて、申し訳ないのですが、
ドキュメントのエイリアス変数([*alias*])を配列で取り込みたいのですが、どう記述すれば教えていただけますでしょうか?
$modx->documentObject['alias'] と記述すればいいのかと思いましたが、違いますね。最終的に取得した配列を連想配列にしたいのですが、宜しくお願いします。

もひとつですが、MODxでphpファイルとして出力することはできるのでしょうか?ドキュメントの配列を取り込んだPHPファイルをcronで実行したいのですが、この場合はどうすればいいのでしょうか?

エイリアス名が11111,22222,33333,・・・・

array(
11111,
22222,
33333,
);

$arr_pageurl = array(
11111 => "/1111.htm",
22222 => "/2222.htm",
33333 => "/3333.htm",
);
にしたい

記述したコードは
$arr_pageurl = array();
$tmp = $modx->documentObject['alias'];
foreach($tmp as $v){
$arr_pageurl[$v] = $v.'.htm';
}
とするとエラー
またこの配列を別PHPに取りこみたい・・・

宜しくお願いします。
soushi
管理人
記事: 224
登録日時: 2009年7月30日(木) 01:59

Re: 各ドキュメントのエイリアス名を配列として取り込みたい

投稿記事 by soushi »

soushiです。

スニペット書いてみました。
こちらはヒントになりそうでしょうか。

コード: 全て選択

$list=array();
foreach( $modx->documentListing as $key => $val){
  $list[$key] = $modx->makeUrl($val);
}
return '<pre>'.print_r($list,true).'</pre>';
ちなみにMODxのインストール時に入れることができるサンプルサイトで実行した結果はこちら。

コード: 全て選択

Array
(
    [test] => /test.html
    [index] => /index.html
    [blog] => /blog.html
    [request-an-account] => /request-an-account.html
    [doc-not-found] => /doc-not-found.html
    [search-results] => /search-results.html
    [feed.rss] => /feed.rss.html
    [features] => /features.html
    [geting-help] => /geting-help.html
    [design] => /design.html
    [login] => /login.html
    [blog-login] => /blog-login.html
    [thank-you] => /thank-you.html
    [contact-us] => /contact-us.html
    [blog/article-1126081344] => /blog/article-1126081344.html
    [blog/article-1128398162] => /blog/article-1128398162.html
    [features/ajax] => /features/ajax.html
    [features/menus] => /features/menus.html
    [features/cms] => /features/cms.html
    [features/extendable] => /features/extendable.html
)
toshi さんが書きました: もひとつですが、MODxでphpファイルとして出力することはできるのでしょうか?ドキュメントの配列を取り込んだPHPファイルをcronで実行したいのですが、この場合はどうすればいいのでしょうか?
単純に書かれた質問の通りのことをやりたい場合は、ドキュメントの中にphpコードを書いて(もしくはスニペットで出力して)、別のphpでこんなコードを書けばよさそうです。

コード: 全て選択

$result = eval(file_get_contents('http://www.example.com/php_code.html'));
http://www.example.com/php_code.htmlの中身 ... でお気をつけください
toshi さんが書きました: またこの配列を別PHPに取りこみたい・・・
多分、こういう場合xml形式で出力してあげれば、別phpでSimpleXMLなんかを使って取り込みやすいと思います。
また極端な話、DBにアクセスできるのであれば、自力でquery走らせてDBから引っ張ってくるという方法もありますね :)
toshi
メンバー
メンバー
記事: 12
登録日時: 2010年7月28日(水) 22:38

Re: 各ドキュメントのエイリアス名を配列として取り込みたい

投稿記事 by toshi »

こんばんは、soushiさま アドバイス有り難うございます。

スニペット有り難うございます。連想配列として取り込みできました。とても勉強になります。ちなみにですが連想配列じゃなくて 単純に

array(
11111, // エイリアスID
22222, // 
33333, //
);

のようにエイリアスIDを配列に設定したい場合はどう書けばいいのでしょうか?

もう一つの質問の件で
MODxでphpファイルとして出力することはできるのでしょうか?ドキュメントの配列を取り込んだPHPファイルをcronで実行・・・
単純に書かれた質問の通りのことをやりたい場合は、ドキュメントの中にphpコードを書いて(もしくはスニペットで出力して)、別のphpでこんなコードを書けばよさそうです。

コード: 全て選択
$result = eval(file_get_contents('http://www.example.com/php_code.html'));


http://www.example.com/php_code.htmlの中身 ... でお気をつけください
上記コードでできそうです。 先ほどのエイリアスIDを配列に設定したものを取り込みたいということです。
soushi
管理人
記事: 224
登録日時: 2009年7月30日(木) 01:59

Re: 各ドキュメントのエイリアス名を配列として取り込みたい

投稿記事 by soushi »

soushiです。
toshi さんが書きました: スニペット有り難うございます。連想配列として取り込みできました。とても勉強になります。ちなみにですが連想配列じゃなくて 単純に

array(
11111, // エイリアスID
22222, // 
33333, //
);

のようにエイリアスIDを配列に設定したい場合はどう書けばいいのでしょうか?
perlでいうリスト見たいな表現ですが、phpではリストはできないので、配列として考えます。
前に書いたスニペットを少し変更しました。

コード: 全て選択

<?php
$list=array();
foreach( $modx->documentListing as $key => $val){
  //$list[$val] = "/$val.html"; //方法1
  $list[] = $val; //方法2
  //$list[$val] = null; //方法3
}
return '<pre>'.print_r($list,true).'</pre>';
?>
中にコメントアウトしている部分があります。
方法1、方法2、方法3の行でコメントアウトをひっくり返すことで、ちょっと違うデータが保存されます。
この中のどれかかなぁと思うのですが、いかがでしょうか。
(個人的に方法3はちょっとナシかな…)
toshi
メンバー
メンバー
記事: 12
登録日時: 2010年7月28日(水) 22:38

Re: 各ドキュメントのエイリアス名を配列として取り込みたい

投稿記事 by toshi »

soushiさま
方法2で解決しました。有り難うございます。
eval()でphpとして実行されます
これ便利ですね。ドキュメントでちょこっとPHPコード書けたりするので、色々できそうです。
勉強になりました^^
soushi
管理人
記事: 224
登録日時: 2009年7月30日(木) 01:59

Re: 各ドキュメントのエイリアス名を配列として取り込みたい

投稿記事 by soushi »

soushiです。

無事に解決されたようで良かったです :D
toshi さんが書きました:
eval()でphpとして実行されます
これ便利ですね。ドキュメントでちょこっとPHPコード書けたりするので、色々できそうです。
勉強になりました^^
余談ですが、eval()やURLが指定できるfopen()はコードの書き方によっては外部から攻撃できる穴になりやすいコマンドでもあります。
ネット上でも調べればちょこちょこと事例や注意喚起のサイトが見つかります。
お気をつけてご利用ください :)
返信する