added showing blogs by tag
This commit is contained in:
BIN
cao_blogr.sqlite
BIN
cao_blogr.sqlite
Binary file not shown.
@@ -3,6 +3,7 @@ def includeme(config):
|
|||||||
config.add_route('home', '/')
|
config.add_route('home', '/')
|
||||||
config.add_route('apropos', '/apropos')
|
config.add_route('apropos', '/apropos')
|
||||||
config.add_route('blog', '/blog/{id:\d+}/{slug}')
|
config.add_route('blog', '/blog/{id:\d+}/{slug}')
|
||||||
|
config.add_route('blog_bytag', '/blog_bytag/{tag}/{retour}')
|
||||||
config.add_route('blog_edit', '/blog_edit/{id}')
|
config.add_route('blog_edit', '/blog_edit/{id}')
|
||||||
config.add_route('blog_search', '/blog_search')
|
config.add_route('blog_search', '/blog_search')
|
||||||
config.add_route('login', '/login')
|
config.add_route('login', '/login')
|
||||||
|
|||||||
@@ -12,18 +12,26 @@ class BlogRecordService(object):
|
|||||||
def by_criteria(cls, request, criteria):
|
def by_criteria(cls, request, criteria):
|
||||||
search = "%{}%".format(criteria)
|
search = "%{}%".format(criteria)
|
||||||
query = request.dbsession.query(BlogRecord)
|
query = request.dbsession.query(BlogRecord)
|
||||||
|
query = query.filter(or_(BlogRecord.title.like(search), BlogRecord.body.like(search)))
|
||||||
if request.authenticated_userid == None:
|
if request.authenticated_userid == None:
|
||||||
# if user is anonym, display only published posts
|
# if user is anonym, display only published posts
|
||||||
query = query.filter(BlogRecord.status == 'publié')
|
query = query.filter(BlogRecord.status == 'publié')
|
||||||
query = query.filter(or_(BlogRecord.title.like(search),
|
return query.all()
|
||||||
BlogRecord.body.like(search))).all()
|
|
||||||
return query
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def by_id(cls, request, _id):
|
def by_id(cls, request, _id):
|
||||||
query = request.dbsession.query(BlogRecord)
|
query = request.dbsession.query(BlogRecord)
|
||||||
return query.get(_id)
|
return query.get(_id)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def by_tag(cls, request, tag):
|
||||||
|
query = request.dbsession.query(BlogRecord)
|
||||||
|
query = query.filter(BlogRecord.tag == tag)
|
||||||
|
if request.authenticated_userid == None:
|
||||||
|
# if user is anonym, display only published posts
|
||||||
|
query = query.filter(BlogRecord.status == 'publié')
|
||||||
|
return query.order_by(sa.desc(BlogRecord.created)).all()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_last_created(cls, request):
|
def get_last_created(cls, request):
|
||||||
# gest the 10 last created posts
|
# gest the 10 last created posts
|
||||||
@@ -31,7 +39,7 @@ class BlogRecordService(object):
|
|||||||
if request.authenticated_userid == None:
|
if request.authenticated_userid == None:
|
||||||
# if user is anonym, display only published posts
|
# if user is anonym, display only published posts
|
||||||
query = query.filter(BlogRecord.status == 'publié')
|
query = query.filter(BlogRecord.status == 'publié')
|
||||||
query = query.order_by(sa.desc(BlogRecord.created)).limit(10).all()
|
query = query.order_by(sa.desc(BlogRecord.created)).limit(15).all()
|
||||||
return query
|
return query
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ h3, h4 {
|
|||||||
}
|
}
|
||||||
@media (min-width: 1200px) {
|
@media (min-width: 1200px) {
|
||||||
.container{
|
.container{
|
||||||
padding: 70px 0 0 0;
|
|
||||||
max-width: 950px;
|
max-width: 950px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -115,6 +114,12 @@ h3, h4 {
|
|||||||
.navbar-default .navbar-toggle {
|
.navbar-default .navbar-toggle {
|
||||||
border-color: transparent;
|
border-color: transparent;
|
||||||
}
|
}
|
||||||
|
.navbar-brand {
|
||||||
|
/* centrer le logo */
|
||||||
|
transform: translateX(-50%);
|
||||||
|
left: 50%;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
footer {
|
footer {
|
||||||
background-color: #bc2131;
|
background-color: #bc2131;
|
||||||
color: #f5f5f5;
|
color: #f5f5f5;
|
||||||
|
|||||||
26
cao_blogr/templates/blog_bytag.jinja2
Normal file
26
cao_blogr/templates/blog_bytag.jinja2
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{% extends "layout.jinja2" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<p><a href="{{ url_retour }}">[ retour ]</a></p>
|
||||||
|
|
||||||
|
<table class="table table-condensed">
|
||||||
|
{% for entry in items %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ entry.created.strftime("%d %b %y") }}</td>
|
||||||
|
<td>
|
||||||
|
<a href="{{ request.route_url('blog', id=entry.id, slug=entry.slug) }}">{{ entry.title }}</a>
|
||||||
|
</td>
|
||||||
|
{% if entry.status != 'publié' %}
|
||||||
|
<td><span class="label label-danger">{{ entry.status }}</span></td>
|
||||||
|
{% else %}
|
||||||
|
<td> </td>
|
||||||
|
{% endif%}
|
||||||
|
</tr>
|
||||||
|
{% else %}
|
||||||
|
<p class="text-danger">Aucun post trouvé !</p>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
<p class="text-center">[ {{nb_items}} billets ]</p>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
@@ -46,6 +46,12 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<h2 class="text-center">Index</h2>
|
||||||
|
<p class="text-center">
|
||||||
|
|
|
||||||
|
{% for tag in tags %}
|
||||||
|
<a href="{{ request.route_url('blog_bytag', tag=tag.tag, retour='blog_search') }}">{{ tag.tag }}</a> |
|
||||||
|
{% endfor %}
|
||||||
|
</p>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -10,11 +10,13 @@
|
|||||||
<table id="posts_list" class="table table-condensed">
|
<table id="posts_list" class="table table-condensed">
|
||||||
{% for entry in last_ten %}
|
{% for entry in last_ten %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ entry.created.strftime("%d.%m.%Y") }}</td>
|
<td>{{ entry.created.strftime("%d %b %y") }}</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ request.route_url('blog', id=entry.id, slug=entry.slug) }}">{{ entry.title }}</a>
|
<a href="{{ request.route_url('blog', id=entry.id, slug=entry.slug) }}">{{ entry.title }}</a>
|
||||||
</td>
|
</td>
|
||||||
<td>{{ entry.tag }}</td>
|
<td>
|
||||||
|
[ <a href="{{ request.route_url('blog_bytag', tag=entry.tag, retour='home') }}">{{ entry.tag }}</a> ]
|
||||||
|
</td>
|
||||||
{% if entry.status != 'publié' %}
|
{% if entry.status != 'publié' %}
|
||||||
<td><span class="label label-danger">{{ entry.status }}</span></td>
|
<td><span class="label label-danger">{{ entry.status }}</span></td>
|
||||||
{% else %}
|
{% else %}
|
||||||
@@ -25,5 +27,5 @@
|
|||||||
<p class="text-danger">Aucun post trouvé</p>
|
<p class="text-danger">Aucun post trouvé</p>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
</button>
|
</button>
|
||||||
<a class="navbar-brand" href="{{ request.route_url('home') }}">CAO Blogr</a>
|
<a class="navbar-brand" href="{{ request.route_url('home') }}">CAOTEK</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse navbar-collapse" id="myNavbar">
|
<div class="collapse navbar-collapse" id="myNavbar">
|
||||||
<ul class="nav navbar-nav navbar-right">
|
<ul class="nav navbar-nav navbar-right">
|
||||||
@@ -59,14 +59,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
{% if request.path == '/' %}
|
|
||||||
{# -- display carousel -- #}
|
|
||||||
{% block carousel %}
|
|
||||||
{% endblock carousel %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<!-- Container (The Page Template Section) -->
|
<!-- Container (The Page Template Section) -->
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
<!-- Display Page Title -->
|
<!-- Display Page Title -->
|
||||||
{% if page_title %}
|
{% if page_title %}
|
||||||
<h1>{{ page_title }}</h1>
|
<h1>{{ page_title }}</h1>
|
||||||
|
|||||||
@@ -92,12 +92,32 @@ def blog_edit(request):
|
|||||||
'blog_id': blog_id,
|
'blog_id': blog_id,
|
||||||
'entry': entry, }
|
'entry': entry, }
|
||||||
|
|
||||||
|
@view_config(route_name='blog_bytag', renderer='cao_blogr:templates/blog_bytag.jinja2')
|
||||||
|
def blog_bytag(request):
|
||||||
|
# get tag parameters from request
|
||||||
|
tag = request.matchdict['tag']
|
||||||
|
retour = request.matchdict['retour']
|
||||||
|
url_retour = request.route_url(retour)
|
||||||
|
|
||||||
@view_config(route_name='blog_search',
|
# get the posts by tag
|
||||||
renderer='cao_blogr:templates/blog_search.jinja2')
|
items = BlogRecordService.by_tag(request, tag)
|
||||||
|
nb_items = len(items)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'page_title': "Billets avec tag : " + tag,
|
||||||
|
'items': items,
|
||||||
|
'nb_items': nb_items,
|
||||||
|
'url_retour': url_retour,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@view_config(route_name='blog_search', renderer='cao_blogr:templates/blog_search.jinja2')
|
||||||
def blog_search(request):
|
def blog_search(request):
|
||||||
|
|
||||||
criteria = ''
|
criteria = ''
|
||||||
|
# get the list of tags
|
||||||
|
tags = BlogRecordService.get_tags(request)
|
||||||
|
|
||||||
form = BlogSearchForm(request.POST)
|
form = BlogSearchForm(request.POST)
|
||||||
items = []
|
items = []
|
||||||
if 'form.submitted' in request.params and form.validate():
|
if 'form.submitted' in request.params and form.validate():
|
||||||
@@ -110,12 +130,13 @@ def blog_search(request):
|
|||||||
'form': form,
|
'form': form,
|
||||||
'items': items,
|
'items': items,
|
||||||
'criteria': criteria,
|
'criteria': criteria,
|
||||||
|
'tags': tags,
|
||||||
}
|
}
|
||||||
|
|
||||||
@view_config(route_name='tags', renderer='cao_blogr:templates/tags.jinja2', permission='view')
|
@view_config(route_name='tags', renderer='cao_blogr:templates/tags.jinja2', permission='view')
|
||||||
def tags(request):
|
def tags(request):
|
||||||
|
|
||||||
# get the list of tags of this topic
|
# get the list of tags
|
||||||
tags = BlogRecordService.get_tags(request)
|
tags = BlogRecordService.get_tags(request)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user