Как организовать статьи в связанный список - vorst.ru

Цепочки статей


Можно ли сделать блог удобнее?

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

Цепочки статей

Можно ли сделать блог удобнее?

Ну, во-первых, удобнее по отношению к чему?

К WordPress, например. Некоторое время назад я использовал эту программу для ведения блога.

Для группировки статей в WordPress существует возможность помечать статьи метками или прикреплять к наперед заданной рубрике. Кроме того, в конце статьи есть навигация - предыдущая, следующая статья, ну и меню конечно. Вроде все удобно.

Но, в одну рубрику могут входить статьи, посвященные разным темам. Да и с метками та-же неопределенность.

Вы выбираете конкретную рубрику или метку и получаете список статей вроде связанных между собой, но степень связанности разная. В результате читатель выбирая рубрику получает список статей не отвечающих ожиданиям.

Навигация - предыдущая, следующая то же огорчает. Выполнена она по датам. То есть, чтобы получить нужную последовательность статей, надо не забывать проставлять верные даты. Не очень удобно.

Можно ли улучшить положение?


Используя WordPress я делал собственную навигацию. В начале каждой статьи в ручную размещал ссылки на предыдущие статьи по теме. Читателю уже не нужно было обращаться к рубрикатору, раз напав на нужную статью. По ссылкам можно было пролистать все связанные статьи.

Стало возможным отвлекаться на другие темы, не оставляя еще не совсем завершенный материал в черновиках.

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

Менять WordPress настолько глубоко нет смысла, легче поменять инструмент. Например, отказаться от WordPress в пользу Yii, переняв самые главные положительные качества.

Для связывания статей в цепочку можно добавить в стандартную таблицу post поле previous. Это обычный идентификатор статьи.

При добавлении в блог очередной статьи, нужно выбрать из выпадающего списка предыдущую статью. И это, собственно, все, что необходимо сделать блоггеру.

В представлении frontend/views/post/view.php нужно вывести заголовки всех предыдущих и следующих статей. Сделать это достаточно просто имея поле previous. Например, для предыдущих статей:

<?php if($titles = $data->Previous()): ?>
  <?php foreach($titles as $id => $title): ?>
    <p>
      <?php echo Html::a($title, [
        'post/view', 
        'id'=>$id
      ]); ?>
    </p>
  <?php endforeach; ?>
<?php endif; ?>

Для поиска предыдущих статей нужно в модели common/models/Post.php последовательно "пройтись" по всем статьям начиная с просматриваемой, пока previous имеет заполненное значение.

public function Previous()
{
  $a = [];
  $previous = $this->previous;
  while($previous)
  {
    $post = $this->findOne($previous);
    $a[$post->id] = $post->getTitle();
    $previous = $post->previous;
  }
  return $a;
}

Для поиска следующих статей нужно "пройтись" по всем статьям у которых previous равно post.id статьи начиная с текущей, просматриваемой.

public function Next()
{
  $a = [];
  $next = $this->id;
  while($post = static::find()
    ->where('status=' . self::STATUS_PUBLISHED . ' and previous=' . $next)
    ->one()
  )
  {
    $a[$post->id] = $post->getTitle();
    $next = $post->id;
  }
  return $a;
}

Вывод списка такой же, как и у предыдущих статей.

Если массив $a окажется пустым, можно использовать обычный механизм - возвращать заголовок предыдущей или следующей статьи по дате. Но об этом в следующей статье :)

Заключение

Добавление поля previous позволяет организовать статьи в группы или цепочки не создавая рубрик. Выбрав нужную метку и просмотрев статью, Вы уже точно знаете, какие еще статьи относятся к теме.

комментарии

  • Lettie 24 Июл 2016

    Sergey Morozov 18 Июн 2018

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

Только авторизованные посетители могут оставлять комментарии. Пожалуйста, войдите или пройдите регистрацию.