Отдельная страница для ленты статей

This commit is contained in:
Krivchikov Dmitry 2016-04-01 21:02:12 +03:00
parent edd23ce6a0
commit 49a0c4d358
5 changed files with 171 additions and 2 deletions

View File

@ -121,7 +121,7 @@ class PageController extends Controller
App::setConfig('title', App::$defaultTitle);
self::render('pointsTemplate.php', array(
self::render('page/points.php', array(
'categories' => $categories,
'points' => $result,
'pointsCount' => $pointsCount,
@ -133,6 +133,99 @@ class PageController extends Controller
));
}
static function actionArticles()
{
self::$layout = 'layouts/page.php';
self::addStyle('/css/style.css?ver=' . App::getConfig('version'));
self::addStyle('/css/pageStyle.css?ver=' . App::getConfig('version'));
self::addScript('/js/jquery-2.1.0.min.js');
self::addScript('/js/jquery-ui-1.10.4.custom.min.js');
self::addScript('/js/bootstrap.min.js');
self::addScript('/js/app.js');
self::addStyle('/css/bootstrap.min.css');
self::addStyle('/css/bootstrap-theme.min.css');
$param = array();
$param['order'] = '`pubDate` ASC';
$param['where'] = '`status` = "published"';
$articlesCount = Article::model()->getCount($param);
$pagesCount = intval(ceil($articlesCount/self::elementsByPage));
$fullPagesCount = intval(floor($articlesCount/self::elementsByPage));
$residue = $articlesCount - ($fullPagesCount * self::elementsByPage);
if ($residue < self::minElementsByPage) {
$pagesCount = $fullPagesCount;
}
$page = isset($_GET['page']) ? abs((int)$_GET['page']) : $pagesCount;
$pages = array();
// Заполняем страницы от большей к меньшей - добавляем 3 штуки
for ($index = $pagesCount; (($index > $pagesCount-3) && ($index > 0)); $index--) {
$pages[$index] = 1;
}
// Заполняем страницы от 3 к 1 - добавляем 3 штуки
if ($pagesCount >= 3) {
for ($index = 3; $index > 0; $index--) {
$pages[$index] = 1;
}
}
if ($page > $pagesCount) {
$page = $pagesCount;
} else if ($page < 1) {
$page = 1;
}
// Заполняем страницы вокруг текущей. +/- 2 штуки.
$topIndex = ($page+2 > $pagesCount) ? $pagesCount : $page+2;
$bottomIndex = ($page-3 < 1) ? 1 : $page-3;
for ($index = $topIndex; $index > $bottomIndex; $index--) {
$pages[$index] = 1;
}
krsort($pages);
if ($page == $pagesCount && $residue < self::minElementsByPage) {
$param['limit'] = self::elementsByPage + $residue;
} else {
$param['limit'] = self::elementsByPage;
}
if($page) {
$param['offset'] = self::elementsByPage * ($page - 1);
}
$articles = Article::model()->getAll($param);
$articles = array_reverse($articles);
$result = array();
foreach ($articles as $article) {
$id = $article->id;
$result[$id]['id'] = $article->id;
$result[$id]['title'] = $article->title;
$result[$id]['text'] = mb_substr(Markdown::getClear($article->text), 0, 400, 'UTF-8');
$result[$id]['photoId'] = $article->photoId;
$result[$id]['img'] = $article->getImg('middle');
$result[$id]['author'] = $article->authorUser->nick;
}
App::setConfig('title', App::$defaultTitle);
self::render('page/articles.php', array(
'articles' => $result,
'articlesCount' => $articlesCount,
'page' => $page,
'pagesCount' => $pagesCount,
'pages' => $pages,
'randomPoint' => Point::model()->getRandom(),
));
}
static function actionPoint()
{
$pointId = (int) App::getParam('id');

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -40,6 +40,8 @@
<a href="/user/<?= $item->author ?>" style="float: right;"><?= $item->authorUser->nick ?></a>
</div>
<?php endforeach;?>
<br/>
<a href="/page/articles/"><h4 style="text-align: center;">Тут целая лента статей!</h4></a>
</div>
</div>
<hr/>

74
views/page/articles.php Normal file
View File

@ -0,0 +1,74 @@
<?php
$oldIndex = $pagesCount+1;
?>
<div id="pageSmoothBackground" style="background-image: url(<?= $randomPoint->getImg('middle') ?>);"></div>
<div class="container" style="background-color: rgba(255,255,255, 0.8);margin-top: -10px;padding-bottom: 30px;">
<div class="row">
<div class="col-md-12">
<h1 style="text-align: right;">Лента статей</h1>
<div class="coords-container">
Перейти: <a href="/">на карту</a> или <a href="/page/points">к точкам</a>
</div>
<div style="text-align: justify;">
<div class="pointsWall">
<?php foreach ($articles as $article): ?>
<a href="/article/<?= $article['id'] ?>">
<div style="background-image: url('<?= $article['photoId']>0?$article['img']:'/img/no-background.png' ?>');" class="point">
<span class="header">
<?= $article['title'] ?>
</span>
<?php if($article['photoId'] == 0): ?>
<div>
<?= $article['text'] ?>… <nobr>читать далее »</nobr>
</div>
<?php endif; ?>
</div>
</a>
<?php endforeach; ?>
</div>
</div>
</div>
</div>
<?php if ($pagesCount > 1):?>
<nav>
<ul class="pagination">
<li class="<?= ($page >= $pagesCount) ? 'disabled' : '' ?>">
<a href="<?= ($page >= $pagesCount) ? '#' : '?page='.($page+1) ?>" aria-label="Previous">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
<?php foreach ($pages as $index => $val): ?>
<?php if ($oldIndex-$index != 1):?>
<li><a href="?page=<?= $index + ceil(($oldIndex-$index)/2) ?>" style="<?= $index==$page ? 'background-color: #eeeeed;' : '' ?>">...</a></li>
<?php endif; ?>
<li><a href="?page=<?= $index ?>" style="<?= $index==$page ? 'background-color: #eeeeed;' : '' ?>"><?= $index ?></a></li>
<?php $oldIndex = $index; ?>
<?php endforeach; ?>
<li class="<?= ($page <= 1) ? 'disabled' : '' ?>">
<a href="<?= ($page <= 1) ? '#' : '?page='.($page-1) ?>" aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
</ul>
</nav>
<?php else: ?>
<br/>
<?php endif; ?>
<div class="row">
<div class="col-md-12" style="text-align: center;">
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- Point - DOWN -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-0069680015252793"
data-ad-slot="4972494746"
data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</div>
<hr/>
<?= self::renderPartial('randomPoint.php', array('randomPoint'=>$randomPoint), true)?>
</div>

View File

@ -14,7 +14,7 @@ $oldIndex = $pagesCount+1;
<div class="col-md-12">
<h1 style="text-align: right;">Списки точек по категориям</h1>
<div class="coords-container">
Перейти: <a href="/">на карту</a>
Перейти: <a href="/">на карту</a> или <a href="/page/articles">к статьям</a>
<?php if (App::getParam('user')): ?>
/ <a href="/user/<?=$user->id?>">страница <?=$user->nick?></a>.
<?php endif; ?>