core page models?

remotes/origin/1203
Ivan Kovalkovskyi 11 years ago
commit a0e4654cf5
  1. 11
      core/forms.py
  2. 15
      core/models.py
  3. 12
      core/views.py
  4. 4
      expobanner/models.py
  5. 4
      expobanner/views.py
  6. 50
      meta/models.py
  7. 2
      proj/settings.py
  8. 8
      templates/admin/page/new_page.html
  9. 14
      templates/admin/page/page_template_view.html
  10. 2
      templates/client/blank.html
  11. 2
      templates/client/includes/banners/popup.html
  12. 14
      templates/client/includes/banners/tops.html
  13. 2
      templates/client/popups/cemat_modal.html
  14. 13
      templates/client/static_client/js/rejs/banners.js
  15. 72
      templates/client/static_client/js/rejs/tops.js

@ -61,21 +61,12 @@ class PageForm(TranslatableModelForm):
class Meta:
model = Page
fields = ['url','title','h1','descriptions','keywords', 'body' ]
fields = ['url','title','h1','descriptions','keywords', 'body']
widgets = {
'body':CKEditorWidget,
'keywords':Textarea,
'descriptions':Textarea,
}
def clean_url(self):
url = self.cleaned_data.get('url', None)
if url[0] == '/':
url = url[1:]
if url[-1] == '/':
url = url[:-1]
if ' ' in url:
url.replace(' ', '_')
return url

@ -118,20 +118,19 @@ class Page(TranslatableModel):
super(Page,self).save(*args, **kwargs)
all_field_names = list(self._translated_field_names)
clear_f_n = []
for field_name in all_field_names:
if field_name not in ['master', 'master_id',u'id', 'language_code']:
clear_f_n.append(field_name)
field_items = {field_name:getattr(self, field_name) for field_name in clear_f_n}
clear_f_n = list(set(all_field_names) - {'master', 'master_id', 'id', 'language_code'})
field_items = {}
for fname in clear_f_n:
field_items[fname] = getattr(self, fname)
langs = [lan[0] for lan in settings.LANGUAGES]
for lang in langs:
if lang not in self.get_available_languages():
self.translate(lang)
for field in clear_f_n:
setattr(self, field, field_items.get(field, ''))
for key, value in field_items.items():
setattr(self, key, value)
self.save_translations(self)
return self
def __unicode__(self):
return self.url

@ -218,11 +218,14 @@ class PageList(ListView):
template_name = 'page_admin_list.html'
model = Page
order = 'created'
from django import forms
from django.http import HttpResponseRedirect
class EditPage(UpdateView):
model = Page
template_name = 'new_page.html'
template_name = 'admin/page/new_page.html'
form_class = PageForm
slug_url_kwarg = 'url'
slug_field = 'url'
@ -233,7 +236,8 @@ class EditPage(UpdateView):
return context
def get_success_url(self):
return HttpResponseRedirect('/admin/page/all/')
return reverse_lazy('page_list')
class DeletePage(DeleteView):
template_name = 'admin/page/page_confirm_delete.html'
@ -244,7 +248,7 @@ class DeletePage(DeleteView):
class PageDetailed(DetailView):
model = Page
template_name = 'client/base_catalog.html'
template_name = 'admin/page/page_template_view.html'
slug_field = 'url'
slug_url_kwarg = 'url'

@ -95,8 +95,10 @@ class Banner(models.Model, StatMixin):
html = models.BooleanField(verbose_name=_('HTML?'), default=False)
flash = models.BooleanField(verbose_name=_('Flash?'), default=False)
js = models.BooleanField(verbose_name=_('Javascript?'), default=False)
popup = models.BooleanField(verbose_name=_('Popup?'), default=False)
paid = models.BooleanField(verbose_name=_('Is Paid event link?'), default=False)
# for detecting popups
cookie = models.CharField(max_length=30, blank=True, null=True, default=settings.DEFAULT_POPUP_COOKIE)
public = models.BooleanField(verbose_name=u'Активный', default=True)
created_at = models.DateTimeField(verbose_name=_('Created At'), auto_now_add=True)

@ -46,7 +46,7 @@ def get_banners(request):
for group, banners in group_banners.iteritems():
banner = get_banner_by_params(banners, good_urls, params)
if banner:
if banner.js or banner.html:
if banner.html:
text = banner.text
img = ''
alt = ''
@ -61,7 +61,7 @@ def get_banners(request):
'is_html': banner.html,
'is_flash': banner.flash,
'is_img': is_img,
'is_js': banner.js,
'is_popup': banner.popup,
'img': img,
'alt': alt,
'text': text

@ -3,9 +3,15 @@ from django.db import models
from django.utils import translation
from django.db.models.signals import post_save
from django.utils.translation import ugettext_lazy as _
from django.conf import settings
from django.core.urlresolvers import reverse_lazy
from django.core.cache import cache
from hvad.models import TranslatableModel, TranslatedFields, TranslationManager
from pymorphy.django_conf import default_morph as morph
from functions.signal_handlers import post_save_handler
import copy
# additional funcs
MONTHES = {'jan': _(u'январе'), 'feb': _(u'феврале'), 'mar': _(u'марте'), 'apr': _(u'апреле'),
@ -118,13 +124,6 @@ post_save.connect(post_save_handler, sender=MetaSetting)
# SEO - tests #
from django.db import models
from hvad.models import TranslatableModel, TranslatedFields
from django.conf import settings
from django.core.urlresolvers import reverse_lazy
from django.core.cache import cache
class SeoTextManager(TranslationManager):
cache_time = 120
@ -143,7 +142,7 @@ class SeoTextManager(TranslationManager):
class SeoText(TranslatableModel):
cache_fields = ['title', 'body']
url = models.CharField(max_length=50, unique=True, verbose_name=u"URL: expomap.ru")
translations = TranslatedFields(
@ -153,26 +152,39 @@ class SeoText(TranslatableModel):
objects = SeoTextManager()
def __init__(self, *args, **kwargs):
super(SeoText, self).__init__(*args, **kwargs)
self.is_new = True
self.var_cache = {var: copy.copy(getattr(self, var)) for var in SeoText.cache_fields}
def get_absolute_url(self):
return reverse_lazy('seo_all')
def save(self, *args, **kwargs):
super(SeoText,self).save(*args, **kwargs)
init_lang = self.language_code
self.is_new = bool(self.id)
if not self.is_new: super(SeoText, self).save(*args, **kwargs)
all_field_names = list(self._translated_field_names)
clear_f_n = []
for field_name in all_field_names:
if field_name not in ['master', 'master_id', 'id', 'language_code']:
clear_f_n.append(field_name)
field_items = {field_name:getattr(self, field_name) for field_name in clear_f_n}
field_items = {}
for fname in self.cache_fields:
field_items[fname] = getattr(self, fname)
langs = [lan[0] for lan in settings.LANGUAGES]
langs = [l[0] for l in settings.LANGUAGES]
for lang in langs:
if lang not in self.get_available_languages():
self.translate(lang)
for field in clear_f_n:
setattr(self, field, field_items.get(field, ''))
self.save_translations(self)
for key, value in field_items.items():
if getattr(self, key) is '' or getattr(self, key) is self.var_cache[key]:
setattr(self, key, value)
if self.is_new:
self.save_translations(self)
else:
super(SeoText, self).save(*args, **kwargs)
self.translate(init_lang)
self.var_cache = {var: copy.copy(getattr(self, var)) for var in SeoText.cache_fields}
return self
def __unicode__(self):
return self.url

@ -449,6 +449,8 @@ CLIENT_DATE_FORMAT = ["%d.%m.%Y"]
# cache pages in random seconds. random in this range
CACHE_RANGE = [60, 120]
DEFAULT_POPUP_COOKIE = 'expo_b_default_popup'
try:
from local import *
except ImportError, e:

@ -18,7 +18,7 @@
{% block body %}
{# Uses multilang.html template for translated fields #}
<form method="post" class="form-horizontal" > {% csrf_token %}
<form method="post" action="" class="form-horizontal" > {% csrf_token %}
<fieldset>
<div class="box span8">
<div class="box-header well">
@ -26,16 +26,16 @@
</div>
<div class="box-content">
{# url/slug #}
{% if request.path == '/admin/page/new/' %}
{# {% if request.path == '/admin/page/new/' %}#}
<div class="control-group {% if form.url.errors %}error{% endif %}">
<label class="control-label"><b>{{ form.url.label }}:</b></label>
<div class="controls">
{{ form.langs }}
{{ form.url }}
<span class="help-inline">{{ form.url.errors }}</span>
</div>
</div>
{% endif %}
{# {% endif %}#}
{# h1 #}
<div class="control-group {% if form.h1.errors %}error{% endif %} ">
<label class="control-label"><b>{{ form.h1.label }}:</b></label>

@ -0,0 +1,14 @@
{% extends 'client/base_catalog.html' %}
{% load static %}
{% load i18n %}
{% load template_filters %}
{% block title %}{{ object.title }} {% endblock %}
{% block content_list %}
<div id="title">
{{ object.h1 }}
</div>
<div id="body">{{ object.body }}</div>
{% endblock %}

@ -87,7 +87,7 @@ This template include basic anf main styles and js files,
"tag": "{{ tag }}"
};
</script>
<script type="text/javascript" src="{% static 'client/js/banners.js' %}"></script>
<script type="text/javascript" src="{% static 'client/js/rejs/banners.js' %}"></script>
</head>
<body {% block body_class %}{% endblock %}>

@ -0,0 +1,2 @@
<div id="expo_b_popup" class="popup-window" style="width:800px;">
</div>

@ -1,13 +1,7 @@
{% load static %}
<div id="expo_top_events">
</div>
<script>
/* НУЖНО ЛИ??? */
window.sendData = {
"theme": [{{ themes|join:", " }}],
"country": "{{ country }}",
"city": "{{ city }}",
"tag": "{{ tag }}"
};
var url = "/expo-b/get-tops/";
</script>
<script type="text/javascript" src="{% static 'client/js/rejs/tops.js' %}"></script>

@ -16,7 +16,7 @@
<img src="/static/client/img/expo_b/cemat_modal2.png">
</a>
</div>
<button >Узнать подробнее</button>
<button>Узнать подробнее</button>
</form>
</div>

@ -4,10 +4,17 @@
var API_URL_ROOT = "/expo-b/get-banners/";
var getUrl = function () {
var catalog = "";
var parts = /^\/([^\/]+)(?:\/|$)/i.exec(location.pathname);
if (parts) {
catalog = parts[1];
}
var data = window.sendData;
if (data instanceof Object) {
var search = [];
var search = ["catalog=" + catalog];
for (var key in data) {
if (data.hasOwnProperty(key)) {
@ -23,9 +30,7 @@
}
}
if (search.length) {
return API_URL_ROOT + "?" + search.join("&");
}
return API_URL_ROOT + "?" + search.join("&");
}
return API_URL_ROOT;

@ -0,0 +1,72 @@
(function () {
"use strict";
var API_URL_ROOT = "/expo-b/get-tops/";
var PARENT_ID = "expo_top_events";
var getUrl = function () {
var catalog = "";
var parts = /^\/([^\/]+)(?:\/|$)/i.exec(location.pathname);
if (parts) {
catalog = parts[1];
}
var data = window.sendData;
if (data instanceof Object) {
var search = ["catalog=" + catalog];
for (var key in data) {
if (data.hasOwnProperty(key)) {
var value = data[key];
if (value instanceof Array) {
for (var i = 0, l = value.length; i < l; i++) {
search.push(encodeURIComponent(key) + "=" + encodeURIComponent(value[i]));
}
} else {
search.push(encodeURIComponent(key) + "=" + encodeURIComponent(value));
}
}
}
return API_URL_ROOT + "?" + search.join("&");
}
return API_URL_ROOT;
};
var getTops = function (url, callback) {
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.onreadystatechange = function (event) {
if (event.target.readyState === 4) {
if (event.target.status === 200) {
try {
callback(event.target.responseText);
} catch (error) {
// do nothing
}
}
}
};
xhr.send();
};
var insertTops = function (text) {
var parent = document.getElementById(PARENT_ID);
if (parent) {
parent.innerHTML = text;
}
};
var main = function () {
getTops(getUrl(), insertTops);
};
window.addEventListener("load", main);
})();
Loading…
Cancel
Save