Доукомплектовывание последней части

Эта статья посвящена еще одному варианту решения проблемы незаполненной последней части при обратной выборке. Суть метода заключается в том, что вместо того, чтобы расформировывать последнюю часть, ее, наоборот, доукомплектовывают записями из предпоследней части.

Может быть этот метод покажется несколько экзотическим, но если вам нужно, чтобы во всех частях, в том числе в последней записи, всегда находилось одно и то же число записей, этот метод будет как нельзя кстати.

Как и в предыдущем методе в дескриптор нужно ввести два параметра:

$params['part']['numbering'] = 'desc'
$params['part']['redistribution'] = -1;
На этот раз параметру redistribution присваивается значение -1, что означает, что из предпоследней части берутся записи для комплектования последней части до положенного числа, заданного параметром limit.

Порядок обратной выборки по частям

  • Нарезка на части производится также, как и при прямой выборке.
  • В последней части, которая должна открываться по умолчанию, показываются не оставшиеся записи, а полный набор записей. Недостающие записи берутся из предпоследней части.
  • При переходе с последней части на предпоследнюю (т.е. следующую), заимствованные записи будут показаны заново. Однако, эти записи можно отметить, как уже показанные. Для этого можно воспользоваться переменной $dat['shown'], которая указывает на то, что запись была заимствована последней частью.

    Пользователь может посмотреть предпоследнюю часть раньше последней, например, при переходе по прямой ссылке. В этом случае, переменная $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;

?>