使用twig基于循环构建多个table body元素
Using twig to build multiple table body elements based on loop
我正在传递一组数据以使用 twig 构建 table。我需要做的是在这个 table 中构建多个 tbody
元素,以便在每个 X loop.index
上创建一个新的 tbody
。这背后的原因是我们有现有的 javascript 分页逻辑,只要我传入一个带有多个 tbody
元素的 table 然后我就可以添加一个 .active
class 到 tbody
并显示它。
关于如何在停止构建新的 tbody
元素的同时迭代数据数组的问题,我陷入了 for 循环逻辑。
下面的代码将是最终结果的样子:
<table class="tableList">
<thead>
<tr>
<th>Name</th>
<th>Pet Count</th>
</tr>
</thead>
<tbody class="page current">
<tr>
<td>Visit to Wilder Elementary next Monday</td>
<td>3</td>
</tr>
<tr>
<td>Upcoming pet show</td>
<td>3</td>
</tr>
<tr>
<td>Waiting on collars</td>
<td>6</td>
</tr>
<tr>
<td>Pets that Kiwi Lorem</td>
<td>5</td>
</tr>
<tr>
<td>Waiting on new shampoo</td>
<td>2</td>
</tr>
</tbody>
<tbody class="page">
<tr>
<td>Pets going to photo shoot Friday</td>
<td>1</td>
</tr>
<tr>
<td>Loem ipsum</td>
<td>2</td>
</tr>
<tr>
<td>Pets for visit to White House</td>
<td>0</td>
</tr>
<tr>
<td>test</td>
<td>10</td>
</tr>
<tr>
<td>tet</td>
<td>3</td>
</tr>
</tbody>
<tbody class="page">
<tr>
<td>borm irepre</td>
<td>11</td>
</tr>
</tbody>
</table>
我的树枝模板已经走到这一步了
{% if reminders|length > 1 %}
{% set total = reminders|length %}
{% set perPageCount = 3 %}
{% set totalPages = (total / perPageCount)|round(0,'ceil') %}
<table class="tableList">
<thead>
<tr>
<th>Type</th>
<th>Pet Name</th>
<th>Item To Give</th>
<th>Time</th>
<th>Assigned To</th>
</tr>
</thead>
<tbody class="page current">
{% for reminder in reminders %}
<tr>
<td>
<i class="fas {{ reminder.returnTypeIcon }}"
aria-label="icon"></i>
</td>
<td>{{ reminder.returnPetName }}</td>
<td>{{ reminder.ItemToGive }}</td>
<td>{{ reminder.returnStandardTime }}</td>
<td>{{ reminder.returnAssignedToFullName }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p class="text-center">No reminders for today</p>
{% endif %}
上面的树枝逻辑很好地构建了 table,但我不知道如何将其分解为多个 tbody
元素。
这是 JavaScript 我用来绘制这个 table 的多个 tbody
元素,然后再将其全部移动到树枝中,如果这有助于概念化最终结果给你:
var remindersObj = data,
remindersLength = remindersObj.length,
perPage = 5,
actionDiv = document.getElementById('todayReminderAction');
if (remindersLength >= 1) {
//build table
var table = document.createElement('table'),
block = [],
th = document.createElement('thead'),
thTr = document.createElement('tr'),
nameThTrTd = document.createElement('th'),
itemToGiveThTrTd = document.createElement('th'),
timeThTrTd = document.createElement('th'),
assignedToThTrTd = document.createElement('th'),
petNameThTrTd = document.createElement('th');
table.classList.add('tableList');
nameThTrTd.innerText = 'Type';
petNameThTrTd.innerText = 'Pet Name';
itemToGiveThTrTd.innerText = 'Item To Give';
timeThTrTd.innerText = 'Time';
assignedToThTrTd.innerText = 'Assigned To';
thTr.append(nameThTrTd);
thTr.append(petNameThTrTd);
thTr.append(itemToGiveThTrTd);
thTr.append(timeThTrTd);
thTr.append(assignedToThTrTd);
th.append(thTr);
table.append(th);
remindersObj.forEach(function(reminder,i){
var index = Math.floor(i / perPage);
if (i % perPage === 0) {
if (block[index - 1]) {
table.append(block[index - 1]);
}
block.push(document.createElement('tbody'));
block[index].classList.add('page');
}
var row = document.createElement('tr'),
columnOne = document.createElement('td'),
columnThree = document.createElement('td'),
columnFour = document.createElement('td'),
columnFive = document.createElement('td'),
columnTwo = document.createElement('td');
columnOne.innerHTML = '<i class="fas '+reminder.returnTypeIcon+'"></i>';
columnTwo.innerText = reminder.petName;
columnThree.innerText = reminder.itemToGive;
columnFour.innerText = reminder.time;
columnFive.innerText = reminder.assignedTo;
row.append(columnOne);
row.append(columnTwo);
row.append(columnThree);
row.append(columnFour);
row.append(columnFive);
if (reminder.isCompleted) {
row.classList.add('isCompleted');
}
if (reminder.isPastDue) {
row.classList.add('isPastDue');
}
block[index].append(row);
});
table.append(block[block.length - 1]);
block[0].classList.add('current');
actionDiv.append(table);
buildTablePagination(remindersObj,actionDiv,table,block);
} else {
var noReminderP = document.createElement('p');
noReminderP.classList.add('text-center');
noReminderP.innerText = 'No Reminders for today.';
actionDiv.append(noReminderP);
}
我正在传递一组数据以使用 twig 构建 table。我需要做的是在这个 table 中构建多个 tbody
元素,以便在每个 X loop.index
上创建一个新的 tbody
。这背后的原因是我们有现有的 javascript 分页逻辑,只要我传入一个带有多个 tbody
元素的 table 然后我就可以添加一个 .active
class 到 tbody
并显示它。
关于如何在停止构建新的 tbody
元素的同时迭代数据数组的问题,我陷入了 for 循环逻辑。
下面的代码将是最终结果的样子:
<table class="tableList">
<thead>
<tr>
<th>Name</th>
<th>Pet Count</th>
</tr>
</thead>
<tbody class="page current">
<tr>
<td>Visit to Wilder Elementary next Monday</td>
<td>3</td>
</tr>
<tr>
<td>Upcoming pet show</td>
<td>3</td>
</tr>
<tr>
<td>Waiting on collars</td>
<td>6</td>
</tr>
<tr>
<td>Pets that Kiwi Lorem</td>
<td>5</td>
</tr>
<tr>
<td>Waiting on new shampoo</td>
<td>2</td>
</tr>
</tbody>
<tbody class="page">
<tr>
<td>Pets going to photo shoot Friday</td>
<td>1</td>
</tr>
<tr>
<td>Loem ipsum</td>
<td>2</td>
</tr>
<tr>
<td>Pets for visit to White House</td>
<td>0</td>
</tr>
<tr>
<td>test</td>
<td>10</td>
</tr>
<tr>
<td>tet</td>
<td>3</td>
</tr>
</tbody>
<tbody class="page">
<tr>
<td>borm irepre</td>
<td>11</td>
</tr>
</tbody>
</table>
我的树枝模板已经走到这一步了
{% if reminders|length > 1 %}
{% set total = reminders|length %}
{% set perPageCount = 3 %}
{% set totalPages = (total / perPageCount)|round(0,'ceil') %}
<table class="tableList">
<thead>
<tr>
<th>Type</th>
<th>Pet Name</th>
<th>Item To Give</th>
<th>Time</th>
<th>Assigned To</th>
</tr>
</thead>
<tbody class="page current">
{% for reminder in reminders %}
<tr>
<td>
<i class="fas {{ reminder.returnTypeIcon }}"
aria-label="icon"></i>
</td>
<td>{{ reminder.returnPetName }}</td>
<td>{{ reminder.ItemToGive }}</td>
<td>{{ reminder.returnStandardTime }}</td>
<td>{{ reminder.returnAssignedToFullName }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p class="text-center">No reminders for today</p>
{% endif %}
上面的树枝逻辑很好地构建了 table,但我不知道如何将其分解为多个 tbody
元素。
这是 JavaScript 我用来绘制这个 table 的多个 tbody
元素,然后再将其全部移动到树枝中,如果这有助于概念化最终结果给你:
var remindersObj = data,
remindersLength = remindersObj.length,
perPage = 5,
actionDiv = document.getElementById('todayReminderAction');
if (remindersLength >= 1) {
//build table
var table = document.createElement('table'),
block = [],
th = document.createElement('thead'),
thTr = document.createElement('tr'),
nameThTrTd = document.createElement('th'),
itemToGiveThTrTd = document.createElement('th'),
timeThTrTd = document.createElement('th'),
assignedToThTrTd = document.createElement('th'),
petNameThTrTd = document.createElement('th');
table.classList.add('tableList');
nameThTrTd.innerText = 'Type';
petNameThTrTd.innerText = 'Pet Name';
itemToGiveThTrTd.innerText = 'Item To Give';
timeThTrTd.innerText = 'Time';
assignedToThTrTd.innerText = 'Assigned To';
thTr.append(nameThTrTd);
thTr.append(petNameThTrTd);
thTr.append(itemToGiveThTrTd);
thTr.append(timeThTrTd);
thTr.append(assignedToThTrTd);
th.append(thTr);
table.append(th);
remindersObj.forEach(function(reminder,i){
var index = Math.floor(i / perPage);
if (i % perPage === 0) {
if (block[index - 1]) {
table.append(block[index - 1]);
}
block.push(document.createElement('tbody'));
block[index].classList.add('page');
}
var row = document.createElement('tr'),
columnOne = document.createElement('td'),
columnThree = document.createElement('td'),
columnFour = document.createElement('td'),
columnFive = document.createElement('td'),
columnTwo = document.createElement('td');
columnOne.innerHTML = '<i class="fas '+reminder.returnTypeIcon+'"></i>';
columnTwo.innerText = reminder.petName;
columnThree.innerText = reminder.itemToGive;
columnFour.innerText = reminder.time;
columnFive.innerText = reminder.assignedTo;
row.append(columnOne);
row.append(columnTwo);
row.append(columnThree);
row.append(columnFour);
row.append(columnFive);
if (reminder.isCompleted) {
row.classList.add('isCompleted');
}
if (reminder.isPastDue) {
row.classList.add('isPastDue');
}
block[index].append(row);
});
table.append(block[block.length - 1]);
block[0].classList.add('current');
actionDiv.append(table);
buildTablePagination(remindersObj,actionDiv,table,block);
} else {
var noReminderP = document.createElement('p');
noReminderP.classList.add('text-center');
noReminderP.innerText = 'No Reminders for today.';
actionDiv.append(noReminderP);
}