ユーザーが購入するために選択したアイテムでカートを初期化したい場合、ドロップするたびに
<script>
function dropped(source, nodes, copy, target) {
if(target.id == "myCardId") {
var list = dojo.cookie("mycart");
// split or initialize list (delimiter : comma)
list = list = "" ? [] : list.split(",");
if(dojo.indexOf(nodes[0].id), list) != -1)
// allready there, return
return;
else {
// combine list with every dropped node
dojo.forEach(nodes, function(dropItem) { list.push(dropItem.id); });
// set cookie with new variable
dojo.cookie("mycart", list.join(",");
}
}
}
....
dojo.subscribe("dnd/drop", dropped);
</script>
このようにPHPで実装できますが、例のためにアイテムビューを取得する方法について詳しくは説明しませんが、db_dataにそれらがあります。
<?php
if(isset($_COOKIE) && !empty($_COOKIE['mycart'])) {
$cartContents = "<ul class=\"dndContainer\">";
foreach(explode(",", $_COOKIE['mycart']) as $id)
$cartContents .= "<li class=\"dndItem\">".$db_data[$id]->title."</li>";
$cartContent .= "</ul>";
}
?>
<div id="dragSource"><? print generateView(); ?></div>
<div id="myCartId"><? print $cartContents; ?></div>
または、大きなカートの場合、Cookie は過剰で、ヘッダーが乱雑になります。上記のスクリプトは ID とサーバーを含む XHR を送信し、javascript と同じロジックを使用してそれをセッションに追加できます。その場合は、$_COOKIE を $_SESSION に置き換えるだけです。