2012-03-06 6 views
1

私はこの新しいプロジェクトで変わった場所にいる:私は、動作中のJavascriptアプリケーションを持つクライアントを持っており、CMSを使ってテキスト要素を管理したい。ネイティブJS環境が主導的になるでしょう。静的コンテンツを管理するためのEE:これはどのように行いますか?

EEはコンテンツを管理し、コンテンツディレクトリの静的ファイルにレンダリングするのが理想的です。私はPHPの人ではなく、EEコンテンツに関する私の経験は、タグを使って常に動的でした。今私はテンプレートディレクトリの外にあるファイルやURLにコンテンツを事前レンダリングする必要があるので、いくつかのガイダンスを使用することができます。このような

何かが動作します:

{exp:channel:entries 
    channel="content" 
    disable="categories|category_fields|member_data|pagination|trackbacks" 
    status="Open" 
    dynamic="no" 
    limit="1" 
} 

<?php 
$File = "./articles/YourFile.html"; 
$Handle = fopen($File, 'w'); 
$Data = "<h1>{title}</h1>\n<hr /><p>{base_body}</p>\n"; 
fwrite($Handle, $Data); 
print "Data Written"; 
fclose($Handle); 
?> 

{/exp:channel:entries} 

をしかし、私は実際に手動でコンテンツをレンダリングするためにページを表示しなければならない...これを回避する方法はありますか? EEをサービスとして使用できますか?上記のコンテンツをレンダリングする方法の例が参考になります。私は今日もサービスの頭を抱いています。

+0

あなたはルックスだMovableTypeの:) 機能のような音私の知る限りは存在しません。あなたは実際にシステムからファイルを読む必要がありますか?またはURLをカールすることは可能でしょうか(ローカルなものでさえ)? –

答えて

0

これは、以前にEEテンプレートの静的ファイルを取得するために設定したものです。

私のEEテンプレートは通常どおり設定しました。次に、CURLを使用してテンプレートURLを呼び出し、内容を静的ファイルに書き込むPHPスクリプトを設定します。私は必要な間隔でファイルを実行するためにcronを設定しました。

PHPスクリプトファイルと出力PHPまたはTXTファイル(または名前が必要なもの)はすべて同じディレクトリにあります。出力ファイルには777のパーミッションがあることを確認してください。

これは、PHPスクリプトファイルに入れたものです。ちょうどあなたが使用したいものに$サイトと$ファイル名変数を変更します。あなたのEEテンプレートは次のようになり

set_time_limit(3450); 

#GRAB DATA 
$site = "http://www.domain.com/template-group/template"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$site); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
$result=curl_exec ($ch); 
curl_close ($ch); 

#WRITE DATA TO FILE 
$filename = 'static-file-name.php'; 
if (is_writable($filename)) { 
    if (!$handle = fopen($filename, 'w')) { 
     echo "Cannot open file ($filename)"; 
     exit; 
    } 
    if (fwrite($handle, $result) === FALSE) { 
     echo "Cannot write to file ($filename)"; 
     exit; 
    } 
    echo "Success, updated the accordion file"; 
    fclose($handle); 
} else echo "The file $filename is not writable"; 

{exp:channel:entries channel="content" disable="categories|category_fields|member_data|pagination|trackbacks" status="Open" dynamic="no" limit="1" } 
     <h1>{title}</h1> 
     <hr /> 
     <p>{base_body}</p> 
{/exp:channel:entries} 
0

EEのことは、システム内のコンテンツがページやURLに変換されないことです。チャネルデータは動的であり、しばしば他のソース(グローバル変数、複数のチャネル、低VAR、リストが続く)からのデータと混在します。

これを行うための最良の方法は、エントリが保存されるときにファイルをシステムに書き込むトリガとなる拡張機能を作成することです。あなたはすでにあなたのテンプレートで実行しているPHPとそこにある部分です。

このルートに行く場合は、entry_submission_endフックを延長で使用するためにチェックアウトしてください。トリックは、あなたが出力しているものを把握することです。チャネルデータは必ずしもテンプレートに関連しているわけではないので、チャネルデータをレンダリングするためにテンプレートを選択するか、ページモジュールを使用してEE内でテンプレートを選択する必要があります。

これは100%あなたの質問に対する解決策ではありませんが、あなたが必要とする方向に指摘する必要があります。

関連する問題