У меня есть следующий код, который выводит термины & данные условий (agb) для конкретного поставщика, использующие php echo во всплывающем окне. Это прекрасно работает, пока есть только один поставщик. Когда перечислены дополнительные поставщики, отображаемые данные в новом окне такие же, как и для первого поставщика.
Насколько я понимаю, javascript выполняется за пределами PHP, и, следовательно, значение выходной строки не обновляется (из-за отсутствия target?) И всегда ссылается на первого поставщика, то есть код JavaScript всегда будет заполнять новое окно одним и тем же содержание.
Я думаю, что мне нужно передать идентификатор поставщика или похожий на функцию JavaScript. Но как мне этого добиться?
PHP
<?php if ($_v->getId()): ?>
<p>Seller: <?php echo $_v->getVendorName() ?> </p>
<a href="" class="new-window">terms & conditions</a>
<div style="display:none;">
<div id="agb-text"><?php echo $_v->getData('agb')?></div>
</div>
JS:
<script type='text/javascript'>
jQuery(function($) {
$('a.new-window').click(function(){
var recipe = window.open('','PrintWindow','width=600,height=600');
var html = '<html><head><title>AGB</title></head><body><div id="my-id">' + $('<div />').append($('#agb-text').clone()).html() + '</div></body></html>';
recipe.document.open();
recipe.document.write(html);
recipe.document.close();
return false;
});
});
</script>
Причина, по которой вы всегда получаете один и тот же текст во всплывающем окне, заключается в том, что ваш div, содержащий текст, имеет одинаковый идентификатор agb-text
и с этим именем может быть установлен только 1 идентификатор, остальные будут игнорироваться. Так что вам лучше использовать классы и атрибуты данных.
Вы можете сделать это так:
<?php if ($_v->getId()): ?>
<p>Seller: <?php echo $_v->getVendorName() ?> </p>
<a href="" class="new-window" data-vendor="<?php echo $_v->getVendorID();?>">terms & conditions</a>
<div style="display:none;">
<div id="agb-text-<?php echo $_v->getVendorID();?>"><?php echo $_v->getData('agb')?></div>
</div>
<script type='text/javascript'>
jQuery(function($) {
$('a.new-window').click(function(){
var vendorID = $(this).data("vendor");
var recipe = window.open('','PrintWindow','width=600,height=600');
var html = '<html><head><title>AGB</title></head><body><div id="my-id">' + $('<div />').append($('#agb-text-' + vendorID).clone()).html() + '</div></body></html>';
recipe.document.open();
recipe.document.write(html);
recipe.document.close();
return false;
});
});
</script>
Я использовал $_v->getVendorID()
Я полагаю, что у вас это есть, но если нет, создайте его или используйте что-то более подходящее для создания уникального значения для каждого поставщика.
Сретно 🙂
попробуйте использовать ajax-запрос, чтобы получить ваши данные, и передать свой идентификатор с помощью onclick=<?php echo $_v->getId(); ?>
,
но вам нужно сделать контроллер, чтобы получить ID.