Mustache ではデータがロードされます。json 静的ファイルを使用していて、MySQL DB からデータをロードする方法がわかりません。
例: 現在、「パーシャル」に含まれるデータは .json ファイルからロードされますが、もちろん、動的な方法でデータベースからデータをロードする必要があるアプリケーション (私の場合は mysql) です。
どのようにできるのか?
前もって感謝します!
ジョバンニ
Mustache PHP は単なるテンプレート エンジンです。これは、すぐに使用できるデータベース バインディングを備えた完全なアプリケーションではありません。
Mustache テンプレートをインスタンス化し、必要なデータを提供するアプリケーションを作成する必要があります。
$m = new Mustache_Engine;
echo $m->render(
'Hello {{planet}}',
array('planet' => 'World!')
); // "Hello World!"
値を持つ配列planet=> 'World!'
は、Mustache に渡されるデータです (この場合)。そのデータをデータベースからロードして、変数として mustache に渡すことができます。
既に述べたように、Mustache はテンプレート化に役立ちますが、使用するデータを提供する必要があり、そのデータを取得するには、PHP を MySQL に接続して返す必要があります。タイトルにあるのでPHPを使っていると思いますが…
うまくいけば、これはあなたが始めるのに役立ちます. この例では、 Sakila サンプル データベースのアクター テーブルのデータを使用しています。
サンプルデータ:
# actor_id, first_name, last_name, last_update
1, PENELOPE, GUINESS, 2006-02-15 04:34:33
2, NICK, WAHLBERG, 2006-02-15 04:34:33
3, ED, CHASE, 2006-02-15 04:34:33
4, JENNIFER, DAVIS, 2006-02-15 04:34:33
5, JOHNNY, LOLLOBRIGIDA, 2006-02-15 04:34:33
まず、MySQL からデータを取得する php スクリプトが必要です。json_encodeを使用して、メソッドによって返された配列fetch_all()
を JSON 文字列に変換します。連想配列 ( fetch_all(MYSQLI_ASSOC)
) を取得するように指定すると、"列名" => "値" のペアになります。json_encode()
残りの世話をします。
<?php
//test.php
$mysql = new mysqli(DB_HOST, DB_USER, DB_PASSWD, 'sakila');
$query = "SELECT * FROM actor LIMIT 5";
$result = $mysql->query($query);
echo json_encode($result->fetch_all(MYSQLI_ASSOC));
?>
特にユーザーが送信したデータをクエリの一部として渡す場合、データベースにクエリを実行してデータを返すときに注意する必要があることは他にもありますが、それは質問の範囲を超えているため、ここでは心配しません。
PHP スクリプト出力:
[
{
"actor_id":"1",
"first_name":"PENELOPE",
"last_name":"GUINESS",
"last_update":"2006-02-15 04:34:33"
},
{
"actor_id":"2",
"first_name":"NICK",
"last_name":"WAHLBERG",
"last_update":"2006-02-15 04:34:33"
},
{
"actor_id":"3",
"first_name":"ED",
"last_name":"CHASE",
"last_update":"2006-02-15 04:34:33"
},
{
"actor_id":"4",
"first_name":"JENNIFER",
"last_name":"DAVIS",
"last_update":"2006-02-15 04:34:33"
},
{
"actor_id":"5",
"first_name":"JOHNNY",
"last_name":"LOLLOBRIGIDA",
"last_update":"2006-02-15 04:34:33"
}
]
その後、 $.getJSON()を使用して をロードできますtest.php
。actorData
受信したデータは、変数を介してこの例のコールバック関数にアクセスできます。$.eachメソッドを使用して、JSON オブジェクトである内の各「行」をループしactorData
、以前に定義したテンプレートに従ってそれぞれをレンダリングするように Mustache に指示できます。レンダリングされると、各行が#content
要素に追加されます。
<!--index.html-->
<script type="text/javascript" src="/recipes/include/js/jquery.js"></script>
<script type="text/javascript" src="/recipes/include/js/mustache.js"></script>
<script>
var template = "<div><span>{{first_name}}</span> <span>{{last_name}}</span></div>";
$(function () {
$.getJSON('test.php',
function (actorData) {
$.each(actorData, function (i, actor) {
var html = Mustache.render(template,
actor);
$('#content').append(html);
});
});
});
</script>
<div id="content"></div>
ここには、Mustache.js に加えて jQuery を含めています。