Несколько простых модальностей на одной странице - динамически
Я работаю над проектом внутри компании и хочу использовать simplemodal для отображения информации о клиенте, когда щелкаю в таблице, где перечислены все клиенты.
Это, однако, вызвало у меня некоторые проблемы, и поэтому я сейчас прошу вас, ребята.
Это мой код до сих пор:
<table border="0" cellpadding="0" cellspacing="0" id="customertable" class="sortable">
<thead>
<tr class="odd">
<th>Navn</th>
<th>Telefon</th>
<th>Postnummer</th>
<th>By</th>
</tr>
</thead>
<tbody>
{foreach $results as $customer}
{strip}
<tr class="{cycle values='even,odd'}">
<td class="name" id='mousetracking' title={$customer.name}><a href="#" id="osx{$customer.customerid}">{$customer.name}</a></td>
<td class="data">{$customer.phone}</td>
<td class="data">{$customer.postcode}</td>
<td class="data">{$customer.city}</td>
</tr>
{/strip}
<!-- modal content -->
<div class="modalhidden">
<div id="osx-modal-content{$customer.customerid}">
<div id="osx-modal-title">Customer no #{$customer.customerid}</div>
<div class="close"><a href="#" class="simplemodal-close">x</a></div>
<div id="osx-modal-data">
<h2>Hello! I'm Customer no. #{$customer.customerid}</h2>
</div>
</div>
</div>
{/foreach}
</tbody>
</table>
Displaying {$total} records<br />
<script type="text/javascript">
function addModal(x)
{
$("osx" + x).addEvent("click", function(){
var SM = new SimpleModal();
SM.show({
"title":"Title",
"contents": $("#osx-modal-content" + x).html()
});
});
}
</script>
Как вы могли заметить, я использую smarty для шаблонов, который отлично работает.
Кроме того, один простой модмал отлично работает, но я хочу, чтобы их было несколько с разным контентом.
Вопрос в том, хорошая ли это идея или она должна быть на отдельной странице?
Пожалуйста, скажите, если мне не хватает какой-то информации здесь - это мой первый пост:-)
С уважением, Фредерик
РЕДАКТИРОВАТЬ
Теперь у меня есть этот код:
<table border="0" cellpadding="0" cellspacing="0" id="customertable" class="sortable">
<thead>
<tr class="odd">
<th>Navn</th>
<th>Telefon</th>
<th>Postnummer</th>
<th>By</th>
</tr>
</thead>
<tbody>
{foreach $results as $customer}
{strip}
<tr class="{cycle values='even,odd'}">
<td class="name" id='mousetracking' title={$customer.name}><a href="#" id="{$customer.customerid}">{$customer.name}</a></td>
<td class="data">{$customer.phone}</td>
<td class="data">{$customer.postcode}</td>
<td class="data">{$customer.city}</td>
</tr>
{/strip}
<!-- modal content -->
<!--<div class="modalhidden">-->
<div id="modal_{$customer.customerid}">
<div id="osx-modal-title_{$customer.customerid}">Customer no #{$customer.customerid}</div>
<div class="close"><a href="#" class="simplemodal-close">x</a></div>
<div id="osx-modal-data_{$customer.customerid}">
<h2>Hello! I'm Customer no. #{$customer.customerid}</h2>
</div>
</div>
<!--</div>-->
{/foreach}
</tbody>
</table>
Displaying {$total} records<br />
Вместе с этим кодом JS:
jQuery(function ($) {
var OSX = {
container: null,
init: function () {
$("a").click(function (e) {
e.preventDefault();
$('#modal_' + this.id).modal({
overlayId: 'osx-overlay',
containerId: 'osx-container',
closeHTML: null,
minHeight: 80,
opacity: 65,
position: ['0',],
overlayClose: true,
onOpen: OSX.open,
onClose: OSX.close
});
});
},
open: function (d) {
var self = this;
self.container = d.container[0];
d.overlay.fadeIn('slow', function () {
$('#modal_' + this.id, self.container).show();
var title = $('#osx-modal-title_' + this.id, self.container);
title.show();
d.container.slideDown('slow', function () {
setTimeout(function () {
var h = $('#osx-modal-data_' + this.id, self.container).height()
+ title.height()
+ 20; // padding
d.container.animate(
{height: h},
200,
function () {
$("div.close", self.container).show();
$('#osx-modal-data_' + this.id, self.container).show();
}
);
}, 300);
});
})
},
close: function (d) {
var self = this; // this = SimpleModal object
d.container.animate(
{top:"-" + (d.container.height() + 20)},
500,
function () {
self.close(); // or $.modal.close();
}
);
}
};
OSX.init();
});
и оригинальный jquery.simplemodal.js
Моя единственная проблема сейчас в том, что он загружает модал с правильным div, но этот div скрыт..
1 ответ
Хорошо. Мне удалось это исправить самому.
Закончился этим кодом:
<table border="0" cellpadding="0" cellspacing="0" id="customertable" class="sortable">
<thead>
<tr class="odd">
<th>Navn</th>
<th>Telefon</th>
<th>Postnummer</th>
<th>By</th>
</tr>
</thead>
<tbody>
{foreach $results as $customer}
{strip}
<tr class="{cycle values='even,odd'}">
<td class="name" id='mousetracking' title={$customer.name}><div id="basic-modal"><a href="#" id="{$customer.customerid}">{$customer.name}</a></div></td>
<td class="data">{$customer.phone}</td>
<td class="data">{$customer.postcode}</td>
<td class="data">{$customer.city}</td>
</tr>
{/strip}
{/foreach}
</tbody>
</table>
{foreach $results as $customer}
{strip}
<!-- modal content -->
<div id="basic-modal-content_{$customer.customerid}" style="display:none;" width="600px">
<h3>{$customer.name}</h3>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="150px;">Adresse</td>
<td>{$customer.address1}<br />{$customer.postcode} {$customer.city}</td>
</tr>
<tr>
<td width="150px;">Telefon</td>
<td>{$customer.phone}</td>
</tr>
<tr>
<td width="150px;">Fax</td>
<td>{$customer.fax}</td>
</tr>
<tr>
<td width="150px;">Email</td>
<td>{$customer.email}</td>
</tr>
<tr>
<td width="150px;">Website</td>
<td>{$customer.web}</td>
</tr>
</table>
<br /><br />
<h4>Server Setup</h4>
<code>{$customer.Server_setup}</code>
</div>
{/strip}
{/foreach}
Displaying {$total} records<br />
Вместе с этим JavaScript:
jQuery(function ($) {
// Load dialog on page load
//$('#basic-modal-content').modal();
// Load dialog on click
$('#basic-modal a').click(function (e) {
$('#basic-modal-content_' + this.id).modal({
overlayClose:true
});
return false;
});
});
И это работает как шарм.
Спасибо за весь вклад.