Эта статья посвящена еще одному варианту решения проблемы незаполненной последней части при обратной выборке. Суть метода заключается в том, что вместо того, чтобы расформировывать последнюю часть, ее, наоборот, доукомплектовывают записями из предпоследней части.
Может быть этот метод покажется несколько экзотическим, но если вам нужно, чтобы во всех частях, в том числе в последней записи, всегда находилось одно и то же число записей, этот метод будет как нельзя кстати.
Как и в предыдущем методе в дескриптор нужно ввести два параметра:
$params['part']['numbering'] = 'desc' $params['part']['redistribution'] = -1;На этот раз параметру redistribution присваивается значение -1, что означает, что из предпоследней части берутся записи для комплектования последней части до положенного числа, заданного параметром limit.
Порядок обратной выборки по частям
Пользователь может посмотреть предпоследнюю часть раньше последней, например, при переходе по прямой ссылке. В этом случае, переменная $dat['shown'] появится только в записях последней части, и с ее помощью можно отметить те записи, которые были показаны в предпоследней части.
При обратной выборке по частям могут быть переданы следующие переменные:
$dat['complementary'] | Запись показывается в последней части в качестве дополнительной. Эту переменную можно использовать для закрытия записи от индексации роботами. |
$dat['shown'] |
Запись показывается в предпоследней части, причем, эта запись уже показывалась в последней части для дополнения до полного набора записей. Или, запись показывается в последней части в качестве дополнительной, причем, эта запись уже показывалась в предпоследней части. |
Ниже приведен код шаблона, в котором заимствованные записи с помощью класса shown будут отображены серым цветом.
example.tpl<?php echo "<table>"; foreach ($tab as $dat) { echo "<tr"; if ($dat['shown']) echo " class='shown'"; echo ">"; echo " <td>{$dat['edit']}</td> <td>$dat[1]</td> <td>$dat[2]</td> <td>$dat[3]</td> "; echo "</tr>"; } echo "</table>"; ?>example.css
tr.shown td {color: gray}
example.tdd
<?php
$types[1] = 'varchar(100)';
$types[2] = 'varchar(100)';
$types[3] = 'varchar(100)';
$params['multi-record'] = true;
$params['part']['limit'] = 10;
$params['backward'] = true;
$params['part']['numbering'] = 'desc'
$params['part']['redistribution'] = -1;
?>