チームのメンバーがその月の毎日どれだけ忙しいかを示すカレンダーを作成しています。
私はその中に人がいる配列を持っています:$teammates
。
各チームメイトは別の配列であり、名前と利用可能な日(月曜日から日曜日)を含む別の配列が含まれています。
{exp:channel:entries channel="teammates"}
$teammate = array();
$available_days = array();
{available_days} // this is a PT-checkbox field, it loops through a list of selected checkboxes (mon, tue, wed, etc).
array_push($available_days, "{option_name}");
{/available_days}
$teammate["name"] = "{title}";
$teammate["available_days"] = $available_days;
$teammate["workdays"] = array();
array_push($teammates, $teammate);
{/exp:channel:entries}
今では毎月違って見えます。たとえば、8月1日は水曜日で、9月1日は土曜日です。そのため、日の名前と日の番号のペアを含む、今月の配列も作成する必要があります。[["day_name" => "wed", "day_number" => 1], ["day_name" => "thu", "day_number" => 2], ... etc]
これは、{exp:channel:calendar}
タグを使用して行われます。詳細は関係ありません。と呼ばれる配列になってしまい$days_array_full
ます。
次のステップは、月の日と各チームメイトの利用可能な日を組み合わせることです。そのため、それぞれの中に、$teammate
その人がいる正確な日を含む配列が作成されます。これを「就業日」と呼びます。私はこれを次のように行います:
foreach($teammates as $teammate) {
foreach($teammate["available_days"] as $available_day) {
foreach($days_array_full as $day) {
if($day["name"] == $available_day) {
array_push($teammate["workdays"], array("name" => $day["name"], "number" => $day["number"]));
}
}
}
echo(count($teammate["workdays"]));
// this echoes correct counts, such as about 25 for people who work 5 d/w.
}
しかし、後でチームメイトにアクセスしようとすると$teammate["workdays"]
、配列は空になります。
foreach($teammates as $teammate) {
echo(count($teammate["workdays"]));
// this always gives 0 for any teammate..., why?
}
ExpressionEngineがでPHPコードを実行するため、これはある種のスコープの問題eval()
だと思いますが、それを機能させるために何を変更すればよいかを実際に理解することはできません。