Отключение или запрет индексации страниц объектов коллекции

В сайтах на основе Простой модели могут автоматически выводиться страницы объектов коллекции. Это связано с тем, что каркасный код таких сайтов обычно автоматически выводит страницы объектов стандартных коллекций (категорий, имеющих режим разрешений 2 или 3). Но подобные страницы нужны не всегда, например для «микроблога» может быть достаточно вывода сообщений только в ленте сообщений. Разберем этот случай на примере коллекции info и ее объекта с идентификатором 1.

Конечно, в этом случае проще всего прямо в контроллере вызвать обработчик ошибки 404 или пробросить соответствующее исключение, например в G-Drive можно подключить к коллекции info заголовочный файл info.h.php следующего содержания:

<?php error(404);

Но для Gency такой способ имеет один недостаток, если в ней нужна функция просмотра объектов коллекции в пользовательском представлении, потому что данная функция реализуется при поддержке «головной» части сайта. Если это необходимо, просмотр объекта должен быть обеспечен при запросе по адресу /info/1 к «головной» части сайта. По данному адресу можно непосредственно выводить страницу объекта или выполнять перенаправление. Допустим, такая функция нужна.

Вместо отключения страниц объектов коллекции обычно достаточно запретить их индексацию. Для этого в файле robots.txt можно использовать следующую директиву:

Disallow: /info/

Данный запрет не затрагивает страницу по адресу /info, поэтому на ней можно разместить, например, ленту сообщений «микроблога». (Но если используется адресация с завершающим слешем, то страница по адресу /info/ уже попадает под действие этой директивы, так же как и /info/1.)

Адресам страниц объектов коллекции можно найти и полезное применение. Например, их можно использовать для перенаправления на соответствующие сообщения ленты сообщений. Для многостраничной ленты сообщений от этого будет наибольшая польза: адрес /info/1 будет постоянным, а адрес /info#1 со временем может меняться на /info?p=2#1 и т.д. На G-Drive данный функционал может быть реализован следующим образом:

<?php

require PATH.'include/pagelink.php';
require PATH.'include/pnbyid.php';

try
{
  if ($page['active'])
  {
    header('Location: '.pagelink(pnbyid($page['id'])).'#'.$page['id']);
    $r0['module']='exit';
    $r0['bits']=32;
  }
  else { error(404); }
}
catch (Exception $e) { error(503); }

Пример реализации функции pnbyid, позволяющей получить номер страницы ленты сообщений, на которой находится сообщение, по идентификатору этого сообщения:

<?php

require_once PATH.'include/query.php';

function pnbyid($id,$pp=10)
{
  global $table;
  $result=query("SELECT COUNT(*) DIV $pp + 1 FROM `{$table('info')}` WHERE `id`>$id AND `active`");
  list($pn)=$result->fetch_row();
  $result->free();
  return $pn;
}

Подобное перенаправление лучше использовать совместно с показанной выше директивой файла robots.txt.

Комментарии: 0

Отправить комментарий

Ваш адрес E-mail не будет опубликован.