у меня есть следующее, что я успешно преобразовал в Coldfusion, насколько я знаю, я прав в своем разговоре, но поведение раздражает, не уверен
вот вариант php
<?php if (isset($_SESSION['box_status'])) {
print '<script type="text/javascript">';
print '$(function() {';
foreach ($_SESSION['box_status'] as $openedbox) {
print 'Popup('.$openedbox['partner_id'].',"'.$openedbox['partner_username'].'",'.$openedbox['box_status'].');';
}
print "});";
print '</script>';
}
?>
вариант cfm
<cfif isDefined('session.box_status')>
<cfsavecontent variable="a">
<script type="text/javascript">
$(function() {
for (<cfoutput>#session.box_status#</cfoutput> in openedbox) {
Popup(#openedbox['partner_id']#,"#openedbox['partner_username']#",#openedbox['box_status']#);
}
});
</script>
</cfsavecontent>
<cfoutput>#a#</cfoutput>
</cfif>
Код прекрасно работает в php, но я никогда не поддерживаю сеанс в Coldfusion, если я обновляю страницу, что делает php »
это сгенерированный код PHP с дампом
DUMP
array(2) {
[0]=>
array(3) {
["partner_id"]=>
string(1) "2"["partner_username"]=>
string(9) "Elizabeth"["box_status"]=>
string(1) "1"}
[1]=>
array(3) {
["partner_id"]=>
string(1) "3"["partner_username"]=>
string(6) "Joseph"["box_status"]=>
string(1) "1"}
}
Код, сгенерированный кодом php
<script type="text/javascript">$(function() {Popup(2,"Elizabeth",1);Popup(3,"Joseph",1);});</script>
Если session.box_status в массиве, то вы можете сделать это только для того, чтобы сохранить все как тег. Вы действительно смешиваете CF и javascript, и вы увидите вывод цикла for в javascript, где вы просматриваете html.
<cfif isDefined('session.box_status')>
<cfsavecontent variable="a">
<script type="text/javascript">
$(function() {
<cfoutput>
<cfloop array="#session.box_status# index=openedbox>
Popup(#openedbox['partner_id']#,"#openedbox['partner_username']#",#openedbox['box_status']#);
</cfloop>
</cfoutput>
});
</script>
</cfsavecontent>
<cfoutput>#a#</cfoutput>
Это не будет идеально, но это ближе к тому, что вы ищете:
<cfif isDefined('session.box_status')>
<cfsavecontent variable="a">
<cfloop collection="#session.box_status#" item="x">
<cfoutput>
Popup(#x['partner_id']#,"#x['partner_username']#",#x['box_status']#);
</cfoutput>
</cfloop>
</cfsavecontent>
<script type="text/javascript">
$(function() {
<Cfoutput>#a#</CFOUTPUT>
};
</script>
</cfif>
Обратите внимание, что в этом коде предполагается, что session.box_status — это структура с тремя членами: partner_id, partner_username и box_status. если это не так, то ваш первый заказ — выяснить, что именно session.box_status является так как это то, что вы проходите. Сделайте дамп этого предмета, чтобы получить подсказки.
Идея заключается в том, что вы сохраняете в переменную a только отдельные вызовы popup (), а затем переводите их в свой JS. Есть и другие способы сделать это, но такой код сложно сделать красивым. удачи 🙂
РЕДАКТИРОВАТЬ:
Обратите внимание — вы говорите, что это «простые строки», которые вы хотите зациклить, но PHP-код, похоже, указывает на какой-то объект. Вот где мы в замешательстве. Если это строки, вам может понадобиться изменить мой код, чтобы перебрать LIST и извлечь элементы в определенных позициях. Но вам действительно нужно выбросить # session.box_status #, чтобы узнать, с чем вы здесь столкнулись.
РЕДАКТИРОВАТЬ 2:
хорошо, в этом случае вам нужно перебрать массив. Но это не будет «сессия» — потому что сессия — это структура, а не массив. Так что я не уверен, какое имя объекта у тебя в начале. Выгрузка сессии может дать вам подсказку. В приведенном ниже примере я просто называю это thisArray — вам придется разобраться с этой частью. Кроме этого это очень близко к тому, что вы ищете.
<cfloop array="#thisArray#" index="x">
<cfoutput>
Popup(#thisArray[x].['partner_id']#,"#thisArray[x].['partner_username']#",#thisArray[x]['box_status']#);
</cfoutput>
</cfloop>
ПРИМЕЧАНИЕ. Этот фрагмент заменит фрагмент кода cfsavecontent выше.
Лучший способ проверить ваш сгенерированный HTML-код, и вы поймете, почему он ведет себя странно.
‘foreach’ в PHP-версии использует php-код, но в CFML-версии он будет печататься на JavaScript, поэтому, очевидно, он не сможет получить переменную openbox, и вы можете получить ошибку.
Также поместите весь текст тега cfsavecontent, чтобы избежать многократного вывода cfout.
РЕДАКТИРОВАТЬ:
<cfif isDefined('session.box_status')>
<cfsavecontent variable="a"><cfoutput>
<script type="text/javascript">
$(function() {
<cfloop array="#session.box_status#" index="openedbox">
Popup(#openedbox['partner_id']#,"#openedbox['partner_username']#",#openedbox['box_status']#);
</cfloop>
});
</script></cfoutput>
</cfsavecontent>
<cfoutput>#a#</cfoutput>
</cfif>