[Hejes-devel] [877] blog: many new features
hejes-devel at nytud.hu
hejes-devel at nytud.hu
Tue Jul 30 18:01:08 CEST 2013
Revision: 877
Author: mihaltz
Date: 2013-07-30 18:01:08 +0200 (Tue, 30 Jul 2013)
Log Message:
-----------
blog: many new features
Modified Paths:
--------------
trunk/misc/dbblog/Makefile
trunk/misc/dbblog/test.py
trunk/web2py/applications/helyesiras_webdev/controllers/blog.py
trunk/web2py/applications/helyesiras_webdev/databases/12731f961fce6b1f660fb9156944086a_posts.table
trunk/web2py/applications/helyesiras_webdev/databases/12731f961fce6b1f660fb9156944086a_tags.table
trunk/web2py/applications/helyesiras_webdev/databases/sql.log
trunk/web2py/applications/helyesiras_webdev/models/dbblog.py
trunk/web2py/applications/helyesiras_webdev/modules/util.py
trunk/web2py/applications/helyesiras_webdev/views/blog/index.html
trunk/web2py/applications/helyesiras_webdev/views/blog/show.html
trunk/web2py/applications/helyesiras_webdev/views/layout.html
Modified: trunk/misc/dbblog/Makefile
===================================================================
--- trunk/misc/dbblog/Makefile 2013-07-30 09:33:30 UTC (rev 876)
+++ trunk/misc/dbblog/Makefile 2013-07-30 16:01:08 UTC (rev 877)
@@ -8,6 +8,11 @@
create_db:
mysql -u root -p < dbblog_create_database.sql
+# recreate DB: drop & create
+recreate_db:
+ ( echo "drop database dbhelyesblog;" ; cat dbblog_create_database.sql ) | mysql -u root -p
+
+
# create DB users
create_dbusers:
mysql -u root -p < dbblog_create_users.sql
Modified: trunk/misc/dbblog/test.py
===================================================================
--- trunk/misc/dbblog/test.py 2013-07-30 09:33:30 UTC (rev 876)
+++ trunk/misc/dbblog/test.py 2013-07-30 16:01:08 UTC (rev 877)
@@ -19,6 +19,8 @@
from gluon import *
from gluon.dal import Row
+sys.path.append('../../web2py/applications/helyesiras_webdev/modules')
+import util
db = DAL("mysql://dbblogadmin:d4bl0GGr@localhost/dbhelyesblog")
# location of .table files = ???
@@ -34,7 +36,8 @@
)
db.define_table('tags',
- Field('name', unique=True)
+ Field('name', unique=True),
+ Field('posts', 'list:reference posts')
)
db.define_table('categories',
@@ -46,7 +49,7 @@
Field('title'),
Field('image', 'reference images'),
Field('body', 'text'),
- Field('tags', 'list:reference tags'),
+ Field('tags', 'list:string'),
Field('category', 'reference categories'),
Field('created_on', 'datetime') # TODO add in webpy: default=request.now),
)
@@ -75,13 +78,9 @@
def create_indexes():
"""Create indexes (if they didn't exist) on frequently used columns. Note: tables must already exist (otherwise raises exception)."""
- #db.executesql('CREATE UNIQUE INDEX idx_images_title ON images (title);')
create_index_if_not_exists(db, 'images', 'idx_images_title', 'title', True)
- #db.executesql('CREATE UNIQUE INDEX idx_tags_name ON tags (name);')
create_index_if_not_exists(db, 'tags', 'idx_tags_name', 'name', True)
- #db.executesql('CREATE UNIQUE INDEX idx_categories_name ON categories (name);')
create_index_if_not_exists(db, 'categories', 'idx_categories_name', 'name', True)
- #db.executesql('CREATE INDEX idx_posts_created_on ON posts (created_on);')
create_index_if_not_exists(db, 'posts', 'idx_posts_created_on', 'created_on')
db.commit()
@@ -94,15 +93,14 @@
def add_test_data():
db.categories.bulk_insert([{'name': 'Hírek'}, {'name': 'Közönségszolgálat'}, {'name': 'Helyesírási érdekességek'}])
- db.tags.bulk_insert([{'name': 'Új verzió'}, {'name': 'Hibajavítás'}, {'name': 'Különírás-egybeírás'}, {'name': 'Teszt'}])
now = datetime.datetime.now()
db.posts.insert(
slug='elindult-a-blog',
title='Elindult a blog',
- body='#Elindult a blog\n\nEnnek *nagyon* örülünk.',
+ body="Ez itt az **első** bekezdés.\n\nEz pedig a ''második''.",
created_on=now.strftime('%Y-%m-%d %H:%M:%S'),
category=db.categories(name='Hírek').id,
- tags=[db.tags(name='Új verzió').id]
+ tags=['új verzió']
)
db.posts.insert(
slug='teszt-bejegyzes',
@@ -110,7 +108,7 @@
body='Ez egy teszt bejegyzés.',
created_on=(now + datetime.timedelta(minutes=1)).strftime('%Y-%m-%d %H:%M:%S'),
category=db.categories(name='Közönségszolgálat').id,
- tags=[db.tags(name='Teszt').id]
+ tags=['teszt']
)
db.posts.insert(
slug='teszt-bejegyzes-2',
@@ -118,19 +116,34 @@
body='Ez is egy teszt bejegyzés.',
created_on=(now + datetime.timedelta(minutes=2)).strftime('%Y-%m-%d %H:%M:%S'),
category=db.categories(name='Helyesírási érdekességek').id,
- tags=[db.tags(name='Teszt').id, db.tags(name='Különírás-egybeírás').id]
+ tags=['teszt', 'különírás-egybeírás']
)
db.posts.insert(
slug='fekete-rigo-sarga-rigo',
title='Fekete, sárga: rigó?',
- body='Hogy kell írni őket? Olvasson tovább, kiderül.',
+ body='Hogy kell írni őket? A franc se tudja.',
created_on=(now + datetime.timedelta(minutes=3)).strftime('%Y-%m-%d %H:%M:%S'),
category=db.categories(name='Helyesírási érdekességek').id,
- tags=[db.tags(name='Teszt').id, db.tags(name='Különírás-egybeírás').id]
+ tags=['teszt', 'tulajdonnevek']
)
db.commit()
+def regenerate_tags_table():
+ """Truncate table tags and generate its contents from table posts (using column tags)"""
+ db.tags.truncate()
+ data = {} # {tag: [post_ids], ...}
+ for row in db().select(db.posts.ALL):
+ for tag in row.tags:
+ if tag not in data:
+ data[tag] = [row.id]
+ else:
+ data[tag].append(row.id)
+ for tag in data:
+ db.tags.insert(name=tag, posts=data[tag])
+ db.commit()
+
+
def some_test():
print(db(db.categories.name=='Szolgálati közlemények').select()[0].id)
print(db.categories(name='Szolgálati közlemények').id)
@@ -146,188 +159,24 @@
rows = db(db.posts.category==db.categories.id).select(orderby=~db.posts.created_on, limitby=(0, 5))
for row in rows:
#print row
- print(row.posts['title'], row.categories['name'])
+ print(row.posts['title'], row.categories['name'], util.pretty_hu_date(row.posts.created_on).encode('utf8'))
+def query_post():
+ slug='fekete-rigo-sarga-rigo'
+ #post = db((db.posts.category==db.categories.id) & (db.posts.slug==slug)).select()
+ post = db( (db.posts.category==db.categories.id) & (db.posts.slug==slug)).select(
+ left=db.images.on(db.posts.image==db.images.id) )
+ print(len(post))
+ print(post)
+def query_posts_tag():
+ tag='tulajdonnevek'
+ posts = db(db.posts.tags.contains(tag)).select(db.posts.ALL)
+ print(posts)
-# LEGACY:
-
-
-# dump table and fields and types
-def dump_tables():
- for table in db.tables:
- print table + ':'
- for field in db[table].fields:
- print ' ' + field + ': ' + str(db[table][field].type)
- print('')
-
-# Deletes all tables when new database csv file needs to be imported
-def dropdb():
- for table_name in db.tables():
- db[table_name].drop()
- define_tables()
-
-# tests
-def test_add_data():
- prof = []
- prof.append( db.hqa_prof_cat_names.insert(name='filo') )
- prof.append( db.hqa_prof_cat_names.insert(name='bio') )
- db.hqa_main.insert(qword='alma', answer='alma!', prof_cat_ids=prof)
-
-def test_query0():
- rows = db(db.hqa_main).select()
- for row in rows:
- print row
-
-def test_query1():
- # 1-to-many
- prof = []
- prof.append( db.hqa_prof_cat_names.insert(name='filo') )
- prof.append( db.hqa_prof_cat_names.insert(name='bio') )
- db.hqa_main.insert(qword='alma', answer='alma!', prof_cat_ids=prof)
- db.hqa_main.prof_cat_ids.represent = lambda ids: [db.hqa_prof_cat_names(x).name for x in ids]
- #rows = db(db.hqa_main.prof_cat_ids.contains(prof[0])).select()
- rows = db(db.hqa_main.prof_cat_ids.contains( 1 )).select()
- for row in rows:
- print row
- print row.id, row.qword, db.hqa_main.prof_cat_ids.represent(row.prof_cat_ids)
- #print db.hqa_prof_cat_names(1)
-
-def test_query2():
- # inner join
- i = db.hqa_prob_cat_names.insert(name='Hangjeloles')
- db.hqa_main.insert(qword='alma', answer='alma!', prob_cat_id=i)
- rows = db(db.hqa_main.prob_cat_id==db.hqa_prob_cat_names.id).select()
- for row in rows:
- print row
- print row.hqa_main.id, row.hqa_main.qword, row.hqa_main.answer, row.hqa_prob_cat_names.name
-
-def test_query3():
- # inner join
- rows = db(db.hqa_main.prob_cat_id==db.hqa_prob_cat_names.id).select(limitby=(0, 10))
- for row in rows:
- print '; '.join([str(row.hqa_main.id), row.hqa_main.qword, row.hqa_main.answer, row.hqa_prob_cat_names.name])
-
-def test_query4():
- # inner join
- i = db.hqa_prob_cat_names.insert(name='Hangjeloles')
- db.hqa_main.insert(qword='alma', answer='alma!', prob_cat_id=i)
- db.hqa_main.insert(qword='barack', answer='barack!', prob_cat_id=None)
- rows = db(db.hqa_main.prob_cat_id==db.hqa_prob_cat_names.id).select()
- for row in rows:
- print row
- print row.hqa_main.id, row.hqa_main.qword, row.hqa_main.answer, row.hqa_prob_cat_names.name
-
-def test_query5():
- # left outer join
- i = db.hqa_prob_cat_names.insert(name='Hangjeloles')
- db.hqa_main.insert(qword='alma', answer='alma!', prob_cat_id=i)
- db.hqa_main.insert(qword='barack', answer='barack!', prob_cat_id=None)
- rows = db().select(db.hqa_main.ALL, db.hqa_prob_cat_names.ALL, left=db.hqa_prob_cat_names.on(db.hqa_main.prob_cat_id==db.hqa_prob_cat_names.id))
- for row in rows:
- print row
- print row.hqa_main.id, row.hqa_main.qword, row.hqa_main.answer, row.hqa_prob_cat_names.name
-
-def test_query6():
- # left outer join
- rows = db().select(db.hqa_main.ALL, db.hqa_prob_cat_names.ALL, left=db.hqa_prob_cat_names.on(db.hqa_main.prob_cat_id==db.hqa_prob_cat_names.id), limitby=(0, 50))
- for row in rows:
- print '; '.join([str(row.hqa_main.id), row.hqa_main.qword, row.hqa_main.answer, row.hqa_prob_cat_names.name])
-
-def test_update():
- # insert + select + update
- i = db.hqa_main.insert(qword='alma', answer='alma!')
- row = db.hqa_main(i) # same as: row = db(db.hqa_main.id==i).select().first()
- print row
- row.prof_cat_ids = [1,2]
- row.update_record()
- print row
- row.prof_cat_ids.append(3)
- row.update_record()
- print row
- db.commit()
-
-def test_query7():
- # select: empty result set
- row = db.hqa_main(11111)
- print row == None
- print row
-
-def test_query8():
- # select w/ left join + 1-to-many
- db.hqa_main.prof_cat_ids.represent = lambda ids: [db.hqa_prof_cat_names(x).name for x in ids]
- db.hqa_main.remark_ids.represent = lambda ids: [db.hqa_remark_names(x).name for x in ids]
- rows = db().select(db.hqa_main.ALL, db.hqa_prob_cat_names.ALL, left=db.hqa_prob_cat_names.on(db.hqa_main.prob_cat_id==db.hqa_prob_cat_names.id), limitby=(0, 50))
- for row in rows:
- #print row
- d = [row.hqa_main.id, row.hqa_main.qword, row.hqa_main.question, row.hqa_main.answer, row.hqa_prob_cat_names.name,
-# row.hqa_main.prof_cat_ids,
- db.hqa_main.prof_cat_ids.represent(row.hqa_main.prof_cat_ids),
-# row.hqa_main.remark_ids,
- db.hqa_main.remark_ids.represent(row.hqa_main.remark_ids),
- row.hqa_main.akh]
- print '; '.join([str(x) for x in d])
-
-def test_query9():
- # select w/ conditions + left join + 1-to-many
- db.hqa_main.prof_cat_ids.represent = lambda ids: [db.hqa_prof_cat_names(x).name for x in ids]
- db.hqa_main.remark_ids.represent = lambda ids: [db.hqa_remark_names(x).name for x in ids]
- rows = db(db.hqa_main.qword.lower().contains(u'sajt')).select(db.hqa_main.ALL, db.hqa_prob_cat_names.ALL, left=db.hqa_prob_cat_names.on(db.hqa_main.prob_cat_id==db.hqa_prob_cat_names.id), limitby=(0, 50))
- for row in rows:
- #print row
- d = [row.hqa_main.id, row.hqa_main.qword, row.hqa_main.question, row.hqa_main.answer, row.hqa_prob_cat_names.name,
- db.hqa_main.prof_cat_ids.represent(row.hqa_main.prof_cat_ids),
- db.hqa_main.remark_ids.represent(row.hqa_main.remark_ids),
- row.hqa_main.akh]
- print '; '.join([str(x) for x in d])
-
-def dump_main():
- # select + left join + 1-to-many
- db.hqa_main.prof_cat_ids.represent = lambda ids: [db.hqa_prof_cat_names(x).name for x in ids]
- db.hqa_main.remark_ids.represent = lambda ids: [db.hqa_remark_names(x).name for x in ids]
- rows = db().select(db.hqa_main.ALL, db.hqa_prob_cat_names.ALL, left=db.hqa_prob_cat_names.on(db.hqa_main.prob_cat_id==db.hqa_prob_cat_names.id))
- for row in rows:
- #print row
- d = [row.hqa_main.id, row.hqa_main.qword, row.hqa_main.question, row.hqa_main.answer, row.hqa_prob_cat_names.name,
- db.hqa_main.prof_cat_ids.represent(row.hqa_main.prof_cat_ids),
- db.hqa_main.remark_ids.represent(row.hqa_main.remark_ids),
- row.hqa_main.akh]
- print '\t'.join([str(x) for x in d])
-
-
-def test_query10():
- # select using dynamic query + left join + 1-to-many
- db.hqa_main.prof_cat_ids.represent = lambda ids: [db.hqa_prof_cat_names(x).name for x in ids]
- db.hqa_main.remark_ids.represent = lambda ids: [db.hqa_remark_names(x).name for x in ids]
- # method#1
- q = db.hqa_main.id > 0 # for starters: "select * from db.hqa_main" -- is this the best solution performance-wise??...
- q &= db.hqa_main.qword.lower().contains(u'sajt')
- #q &= db.hqa_main.prob_cat_id == 11
- q &= db.hqa_main.prof_cat_ids.contains(25) # 'konyha'
- print(q)
- # method#2
- qs = [db.hqa_main.id > 0]
- qs.append( db.hqa_main.qword.lower().contains(u'sajt') )
- qs.append( db.hqa_main.prof_cat_ids.contains(25) ) # 'konyha'
- q = reduce( lambda x,y: x & y, qs )
- print(q)
- rows = db(q).select(db.hqa_main.ALL, db.hqa_prob_cat_names.ALL, left=db.hqa_prob_cat_names.on(db.hqa_main.prob_cat_id==db.hqa_prob_cat_names.id), limitby=(0, 50))
- for row in rows:
- #print row
- d = [row.hqa_main.id, row.hqa_main.qword, row.hqa_main.question, row.hqa_main.answer, row.hqa_prob_cat_names.name,
- db.hqa_main.prof_cat_ids.represent(row.hqa_main.prof_cat_ids),
- db.hqa_main.remark_ids.represent(row.hqa_main.remark_ids),
- row.hqa_main.akh]
- #r = Row(id=row.hqa_main.id)
- #print r.id
- print '\t'.join([str(x) for x in d])
-
-
-
-
#########
# main
#########
@@ -336,7 +185,10 @@
define_tables()
#create_indexes()
#add_test_data()
+#regenerate_tags_table()
+
#query_categories()
query_posts()
+#query_post()
+#query_posts_tag()
-
Modified: trunk/web2py/applications/helyesiras_webdev/controllers/blog.py
===================================================================
--- trunk/web2py/applications/helyesiras_webdev/controllers/blog.py 2013-07-30 09:33:30 UTC (rev 876)
+++ trunk/web2py/applications/helyesiras_webdev/controllers/blog.py 2013-07-30 16:01:08 UTC (rev 877)
@@ -9,18 +9,44 @@
"""Starting page for the blog.
returns following keys:
posts: Rows object with most recent 5 blog posts
- categories: Rows object with category names and ids
- tags: Rows object with tag names and ids
+ categories: Rows object with all category names and ids (for sidebar)
+ tags: Rows object with all tag names and ids (for sidebar)
TODO:
check GET vars (category, tag(s?)) and filter posts accordingly
"""
+ # all categories, tags for sidebar
cats = dbblog().select(dbblog.categories.ALL, orderby=dbblog.categories.id)
tags = dbblog().select(dbblog.tags.ALL, orderby=dbblog.tags.name)
- posts = dbblog(dbblog.posts.category==dbblog.categories.id).select(orderby=~dbblog.posts.created_on, limitby=(0, 5))
+ # get posts (last 5, filtered by category or tag)
+ query = dbblog.posts.category == dbblog.categories.id
+ usercat = request.vars.get('category')
+ if usercat:
+ query &= (dbblog.categories.name == usercat)
+ usertag = request.vars.get('tag')
+ if usertag:
+ query &= (dbblog.posts.tags.contains(usertag))
+ # execute query
+ posts = dbblog(query).select(orderby=~dbblog.posts.created_on, limitby=(0, 5))
+ # return
return dict(categories=cats, tags=tags, posts=posts)
def show():
"""Show a selected blog post.
- TODO
+ slug of post to show is passed as an unnamed argument with HTTP GET.
+ If no argumement is present, or if slug is not found in DB, redirect to index page (+flash message?)
+ Returns keys:
+ post: a Row object, first row from a combined select from posts, categories, tags, images
+ categories: Rows object with all category names and ids (for sidebar)
+ tags: Rows object with all tag names and ids (for sidebar)
"""
- return dict()
+ cats = dbblog().select(dbblog.categories.ALL, orderby=dbblog.categories.id)
+ tags = dbblog().select(dbblog.tags.ALL, orderby=dbblog.tags.name)
+ slug = request.args(0)
+ if slug == None: # no arg: redirect to index
+ redirect(URL(c='blog', f='index'))
+ # query TODO: all tables all data as text
+ rows = dbblog( (dbblog.posts.category==dbblog.categories.id) & (dbblog.posts.slug==slug)).select(
+ left=dbblog.images.on(dbblog.posts.image==dbblog.images.id) )
+ if len(rows) == 0: # post not found: redirect to index
+ redirect(URL(c='blog', f='index')) # TODO: add message to flash as a var?
+ return dict(categories=cats, tags=tags, post=rows.first())
Modified: trunk/web2py/applications/helyesiras_webdev/databases/12731f961fce6b1f660fb9156944086a_posts.table
===================================================================
--- trunk/web2py/applications/helyesiras_webdev/databases/12731f961fce6b1f660fb9156944086a_posts.table 2013-07-30 09:33:30 UTTC (rev 876)
+++ trunk/web2py/applications/helyesiras_webdev/databases/12731f961fce6b1f660fb9156944086a_posts.table 2013-07-30 16:01:08 UTC (rev 877)
@@ -88,7 +88,7 @@
sg9
I00
sg10
-S'list:reference tags'
+S'list:string'
p27
ssS'slug'
p28
Modified: trunk/web2py/applications/helyesiras_webdev/databases/12731f961fce6b1f660fb9156944086a_tags.table
===================================================================
--- trunk/web2py/applications/helyesiras_webdev/databases/12731f961fce6b1f660fb9156944086a_tags.table 2013-07-30 09:33:30 UTCC (rev 876)
+++ trunk/web2py/applications/helyesiras_webdev/databases/12731f961fce6b1f660fb9156944086a_tags.table 2013-07-30 16:01:08 UTC (rev 877)
@@ -1,5 +1,5 @@
(dp1
-S'id'
+S'posts'
p2
(dp3
S'length'
@@ -10,32 +10,49 @@
I00
sS'sortable'
p6
-I1
+I3
sS'sql'
p7
-S'INT AUTO_INCREMENT NOT NULL'
+S'LONGTEXT'
p8
sS'notnull'
p9
I00
sS'type'
p10
-g2
-ssS'name'
+S'list:reference posts'
p11
-(dp12
+ssS'id'
+p12
+(dp13
g4
I255
sg5
+I00
+sg6
+I1
+sg7
+S'INT AUTO_INCREMENT NOT NULL'
+p14
+sg9
+I00
+sg10
+g12
+ssS'name'
+p15
+(dp16
+g4
+I255
+sg5
I01
sg6
I2
sg7
S'VARCHAR(255) UNIQUE'
-p13
+p17
sg9
I00
sg10
S'string'
-p14
+p18
ss.
\ No newline at end of file
Modified: trunk/web2py/applications/helyesiras_webdev/databases/sql.log
===================================================================
--- trunk/web2py/applications/helyesiras_webdev/databases/sql.log 2013-07-30 09:33:30 UTC (rev 876)
+++ trunk/web2py/applications/helyesiras_webdev/databases/sql.log 2013-07-30 16:01:08 UTC (rev 877)
@@ -125,3 +125,27 @@
PRIMARY KEY(id)
) ENGINE=InnoDB CHARACTER SET utf8;
success!
+timestamp: 2013-07-30T16:25:30.444596
+CREATE TABLE images(
+ id INT AUTO_INCREMENT NOT NULL,
+ file VARCHAR(255),
+ title VARCHAR(255) UNIQUE,
+ PRIMARY KEY(id)
+) ENGINE=InnoDB CHARACTER SET utf8;
+timestamp: 2013-07-30T16:26:01.650869
+CREATE TABLE images(
+ id INT AUTO_INCREMENT NOT NULL,
+ file VARCHAR(255),
+ title VARCHAR(255) UNIQUE,
+ PRIMARY KEY(id)
+) ENGINE=InnoDB CHARACTER SET utf8;
+timestamp: 2013-07-30T16:26:36.271767
+ALTER TABLE tags DROP COLUMN posts;
+success!
+timestamp: 2013-07-30T16:33:18.094824
+CREATE TABLE images(
+ id INT AUTO_INCREMENT NOT NULL,
+ file VARCHAR(255),
+ title VARCHAR(255) UNIQUE,
+ PRIMARY KEY(id)
+) ENGINE=InnoDB CHARACTER SET utf8;
Modified: trunk/web2py/applications/helyesiras_webdev/models/dbblog.py
===================================================================
--- trunk/web2py/applications/helyesiras_webdev/models/dbblog.py 2013-07-30 09:33:30 UTC (rev 876)
+++ trunk/web2py/applications/helyesiras_webdev/models/dbblog.py 2013-07-30 16:01:08 UTC (rev 877)
@@ -29,7 +29,8 @@
)
dbblog.define_table('tags',
- Field('name', unique=True)
+ Field('name', unique=True),
+ Field('posts', 'list:reference posts')
)
dbblog.define_table('categories',
@@ -41,7 +42,7 @@
Field('title'),
Field('image', 'reference images'),
Field('body', 'text'),
- Field('tags', 'list:reference tags'),
+ Field('tags', 'list:string'),
Field('category', 'reference categories'),
Field('created_on', 'datetime', default=request.now)
)
Modified: trunk/web2py/applications/helyesiras_webdev/modules/util.py
===================================================================
--- trunk/web2py/applications/helyesiras_webdev/modules/util.py 2013-07-30 09:33:30 UTC (rev 876)
+++ trunk/web2py/applications/helyesiras_webdev/modules/util.py 2013-07-30 16:01:08 UTC (rev 877)
@@ -47,4 +47,11 @@
return unicode(i, 'utf8', 'replace')
-
+def pretty_hu_date(d):
+ """Takes a datetime.datetime object and returns unicode string with pretty Hungarian format of date,
+ e.g. datetime.datetime(2013, 7, 30, 16, 42, 29) => u"2013. július 30. 16:42"
+ """
+ hn = [u'január', u'február', u'március', u'április', u'május', u'június', u'július', u'augusztus', u'szeptember', u'október', u'november', u'december']
+ return u'{0}. {1} {2}. {3}:{4}'.format(d.year, hn[d.month-1], d.day, d.hour, d.minute)
+
+
Modified: trunk/web2py/applications/helyesiras_webdev/views/blog/index.html
===================================================================
--- trunk/web2py/applications/helyesiras_webdev/views/blog/index.html 2013-07-30 09:33:30 UTC (rev 876)
+++ trunk/web2py/applications/helyesiras_webdev/views/blog/index.html 2013-07-30 16:01:08 UTC (rev 877)
@@ -1,32 +1,48 @@
{{extend 'layout.html'}}
+{{from util import pretty_hu_date}}
{{block blog_sidebar-first}}
<div>Rovatok</div>
{{for row in categories:}}
- <div>{{=A(row['name'], _href=URL(c='blog', vars={'category': row['id']}))}}</div>
+ <div>
+ {{if request.vars.get('category') == row.name:}}
+ {{=row.name}}
+ {{else:}}
+ {{=A(row.name, _href=URL(c='blog', f='index', vars={'category': row.name}))}}
+ {{pass}}
+ </div>
{{pass}}
<div>Címkék</div>
{{for row in tags:}}
- <div>{{=A(row['name'], _href=URL(c='blog', vars={'tag': row['name']}))}}</div>
+ <div>
+ {{if request.vars.get('tag') == row.name:}}
+ {{='{0} ({1})'.format(row.name, len(row.posts))}}
+ {{else:}}
+ {{=A(row.name, _href=URL(c='blog', f='index', vars={'tag': row.name})) + ' ({0})'.format(len(row.posts))}}
+ {{pass}}
+ </div>
{{pass}}
{{end}}
+<div id="blog-container">
+
{{=response.toolbar()}}
<h1>Blog</h1>
-{{for i, post in enumerate(posts):}}
+{{for i, row in enumerate(posts):}}
<div>
- <div>{{=post.categories['name']}}</div>
- <div>{{=post.posts['title']}}</div>
- <div>{{=post.posts['created_on']}}</div>
- <div>{{=post.posts['body']}}</div>
- <div>{{=A('Tovább', _href=URL())}}</div>
+ <div>{{=row.categories.name}}</div>
+ <div>{{=row.posts.title}}</div>
+ <div>{{=pretty_hu_date(row.posts.created_on).encode('utf8')}}</div>
+ <div>{{=row.posts.body}}</div>
+ <div>{{=A('Tovább', _href=URL(c='blog', f='show', args=[row.posts.slug]))}}</div>
</div>
{{if i < len(posts) - 1:}}
<p>---------------</p>
{{pass}}
{{pass}}
+</div> <!-- <div id="blog-container"> -->
Modified: trunk/web2py/applications/helyesiras_webdev/views/blog/show.html
===================================================================
--- trunk/web2py/applications/helyesiras_webdev/views/blog/show.html 2013-07-30 09:33:30 UTC (rev 876)
+++ trunk/web2py/applications/helyesiras_webdev/views/blog/show.html 2013-07-30 16:01:08 UTC (rev 877)
@@ -1,5 +1,35 @@
{{extend 'layout.html'}}
-<h1>This is the blog/show.html template</h1>
+{{from util import pretty_hu_date}}
-{{=BEAUTIFY(response._vars)}}
+{{block blog_sidebar-first}}
+ <div>Rovatok</div>
+ {{for row in categories:}}
+ <div>{{=A(row.name, _href=URL(c='blog', f='index', vars={'category': row.name}))}}</div>
+ {{pass}}
+ <div>Címkék</div>
+ {{for row in tags:}}
+ <div>{{=A(row.name, _href=URL(c='blog', f='index', vars={'tag': row.name}))}} ({{=len(row.posts)}})</div>
+ {{pass}}
+{{end}}
+
+
+<div id="blog-container">
+
+{{=response.toolbar()}}
+
+<div>{{=post.posts.title}}</div>
+<div>{{=post.categories.name}}</div>
+<div>{{=pretty_hu_date(post.posts.created_on).encode('utf8')}}</div>
+{{ # TODO: image }}
+<div>{{=MARKMIN(post.posts.body)}}</div>
+<div>Címkék:
+ {{for i, tag in enumerate(post.posts.tags):}}
+ <span>{{=A(tag, _href=URL(c='blog', f='index', vars={'tag': tag}))}}</span>{{if i < len(post.posts.tags) - 1:}},{{pass}}
+ {{pass}}
+</div>
+<div>
+<span>Hozzászólások:</span>
+</div>
+
+</div> <!-- <div id="blog-container"> -->
Modified: trunk/web2py/applications/helyesiras_webdev/views/layout.html
===================================================================
--- trunk/web2py/applications/helyesiras_webdev/views/layout.html 2013-07-30 09:33:30 UTC (rev 876)
+++ trunk/web2py/applications/helyesiras_webdev/views/layout.html 2013-07-30 16:01:08 UTC (rev 877)
@@ -136,7 +136,7 @@
{{end}}
</div></div><!-- statusbar -->
- <div id="page"{{if request.function=='index':}} class="front"{{pass}}><div class="wrapper"> <!-- Here my central body -->
+ <div id="page"{{if request.function=='index' and request.controller=='default':}} class="front"{{pass}}><div class="wrapper"> <!-- Here my central body -->
{{if not (request.controller == 'default' and request.function == 'index'):}}
<div id="sidebar-first">
{{if request.controller == 'default' and request.function not in ['akh', 'gyik', 'hqa', 'howitworks']:}}
More information about the Hejes-devel
mailing list