понедельник, 17 ноября 2014 г.

Django + wsgi установка и настройка с нуля

ВСЕ ДЕЙСТВИЯ ПРОИЗВОДЯТСЯ ПОД УЧЁТКОЙ root, УБЕДИТЕЛЬНАЯ ПРОСЬБА ДЕЛАТЬ РЕЗЕРВНЫЕ КОПИИ ФАЙЛОВ КОНФИГУРАЦИИ ПЕРЕД ИХ ИЗМЕНЕНИМЯ

# Установка subversion
apt-get install subversion
# Качаем Django , желательно перейти в каталог /home
svn co http://code.djangoproject.com/svn/django/trunk/ django-trunk
# Узнаём где лежит Питон, что добавить в него Django
python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
# Делаем ссылку на скаченный Django в каталог с Питоном ниже ПРИМЕР
ln -s /home/django-trunk/django /usr/lib/python2.5/site-packages/django
# Проверяем работоспособность Django.
$ python
>>>import django
>>>django.VERSION
# Установка Серверной части используентся mod wsgi
aptitude install apache2 libapache2-mod-wsgi
# Делаем доступной команду django-admin.py из любго места
ln -s /home/django-trunk/django/bin/django-admin.py /usr/local/bin
# Делаем папки для будующих проектов
mkdir -p /home/django-projects/mysite/
# Создаём сам проект "site" в созданной папке /home/django-projects/mysite/
django-admin.py startproject site
# Скорректируем названия модуля для импорта
perl -pi -e 's/site.urls/urls/g' site/settings.py
# Назначаем права для папки проектов
chmod 0777 -R django-projects/
# Подлючаем проект к Серверу. Создаём файл "django.wsgi" в папке /home/django-projects/mysite/site
nano /home/django-projects/mysite/site/django.wsgi

####################################
# django.wsgi текст файла #
####################################
import os, sys
sys.path.append('/home/django-projects/mysite/')
sys.path.append('/home/django-projects/mysite/site')
os.environ['DJANGO_SETTINGS_MODULE'] = 'site.settings' # в этой строчке site - название твоего проекта

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()
# Сохроняем файл ctrl+o и выходим
# Теперь идём в папку с Apache /etc/apache2/ предварительно сделай резервную копию "apache2.conf"
# Редактируем файл конфигурации apache2.conf для соединения прокта django с веб сервером, для этого добавим VirtualHost
nano /etc/apache2/apache2.conf
############################################
# apache2.conf то что нужно добавить #
############################################
ServerAdmin my@email.com
ServerName mysite.com
ServerAlias www.misite.com

WSGIDaemonProcess mysite user=user_name group=user_name processes=5 maximum-requests=10000
WSGIProcessGroup mysite

Alias /media/ /usr/lib/python2.5/site-packages/django/contrib/admin/media/
#Alias /static/ /home/django-projects/mysite/static/
#Alias /files/ /home/django-projects/mysite/files/

WSGIScriptAlias / /home/django-projects/mysite/site/django.wsgi
Order deny,allow
allow from all

ErrorLog /var/log/apache2/mysite-error.log
LogLevel warn

CustomLog /var/log/apache2/mysite-access.log combined


# Сохроняем файл ctrl+o и выходим


# Перезапускаем сервер Apache
/etc/init.d/apache2 restart
идём в браузер, вписываем адрессвоего компа и радуемся






среда, 5 ноября 2014 г.

Изменение порядка отображения элементов списка li

Вот уже несколько месяцев работаю на новом месте, занимаюсь развитием сайта компании. Немного опишу сам проект, т.к. считаю его интересным. Сам сайт построен на Битрикс 14, функционал содержит интернет-магазин, особенность которого состоит в взаимодействии с SAP , от туда подтягиваются данные по остаткам, ценам и характеристикам в режиме реального времени.

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

И так, есть меню продукции, которое имеет 3 уровня вложенности.

Категория продукта 1
Категория продукта 2
  Под раздел 1
  Под раздел 2
  Под раздел 3
Категория продукта 3
Категория продукта 3  

Задача в "Категории продукта 2" вложенным пунктам задать необходимый порядок
Категория продукта 2
  Под раздел 3
  Под раздел 1
  Под раздел 2

Изначально мне казалось, что все просто - нужно задать порядок разделов в Битрикс, но вот облом не нашел я такой возможности, видел подобные вопросы на форуме без ответа.
Ладно, у нас же есть ещё и SAP нужно там задать нужный порядок и будет счастье, но и тут облом, в SAP все хорошо, а на сайте порядок не меняется.

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

И так имеем вот такой список
http://jsfiddle.net/gwocnepp/1/



Т.к. в конкретной задаче я знаю сколько всего элементов, и как они называются, то можно решить задачу "влоб"
Сначала получим нужные элементы, и положим в переменные.

var element1 =  $('ul:contains("Категория продукта 2")>ul>li:nth-child(1)').detach();
var element2 =  $('ul:contains("Категория продукта 2")>ul>li:nth-child(1)').detach();
var element3 =  $('ul:contains("Категория продукта 2")>ul>li:nth-child(1)').detach();

Если сейчас выполнить код то подразделы не будут отображаться, мы сделали удаление элемента без разрушения его содержимого   detach().

Теперь используя переменные element1, element2, element3, установим нужный нам порядок (3,2,1)

$('ul:contains("Категория продукта 2")>ul').append(element3);
$('ul:contains("Категория продукта 2")>ul').append(element1);
$('ul:contains("Категория продукта 2")>ul').append(element2);

Результат можно посмотреть тут http://jsfiddle.net/gwocnepp/1/


Добавляем этот скрипт в footer шаблона и наслаждаемся жизнью

Есть конечно минусы у такого решения:
- меню будет постоянно перерисовываться при открытии страницы
- не универсальность,т.е. стоит заголовку поменяться или появится новый пункт меню и сортировку придётся переделывать.