Архивы: Март 2011

Динамический фильтр по свойству bitrix

Имеем информационный блог в котором определёно свойство-список «Производитель» со списком всех производителей продукций публикуемой в каталоге. На сайт подключаем компонент каталог и к нему прикрепляем наш информационный блок. В настройках выставляем в блоке «Настройки фильтра» в графе «Свойства:» пункт «Производитель». После сохранения у нас должна появиться страница с выводом каталога. При переходе в какую либо категории каталога появляется фильтр со списком наших производителей. Как известно в списке фильтрации будут присутствовать все производители которые есть в свойстве информационного блока, но зачем мне весь список производителей если на странице три продукта двух производителей. Ну конечно же незачем.

Задача:
доработайте окно выбора производителя, чтобы в выпадающем списке выводились только те производители, продукция которых присутствует на данной странице, с данными условиями поиска.

Решение:
В комплексном компоненте в инклуде компонента фильтра добавляем еще один элемент в котором будет храниться идентификатор раздела в котором находиться данный пользователь. В моем случае он называется «CN». Далее открываем на редактирование шаблон фильтрации предварительно скопировав его себе в шаблон или удобное Вам место. В нем я заменил содержимое элемента таблицы


#PHP CODE#
$rsItems = CIBlockElement::GetList(
	false,
	array(
		"IBLOCK_TYPE"=>$arParams["IBLOCK_TYPE"],
		"IBLOCK_ID"=>$arParams["IBLOCK_ID"],
		"IBLOCK_LID"=>SITE_ID,
		"ACTIVE"=>"Y",
		"SECTION_ID"=>$arParams["CN"],
	),
	array("PROPERTY_COMPANY"),
	false,
	array(
		"ID",
		"NAME",
		"PROPERTY_COMPANY",
	)
);
echo '<select name="arrFilter_pf[COMPANY]"><option value="">(все)</option>';
while($arItem = $rsItems->GetNext()){
	echo '<option value="'.$arItem['PROPERTY_COMPANY_ENUM_ID'].'">'.$arItem['PROPERTY_COMPANY_VALUE'].'</option>';
}
echo '</select>';

Вот так вот у меня теперь на страницы категории выводиться в список только те производители чей товар присутствует на странице.

Установка MySQLdb на Mac OS

После полной переустановки системы и наката новой оси 10.6.7 у меня как у Python программиста возникла задача поднять мост между Python и MySQL. Вот как раз на этом этапе встретились подводные камни в борьбе между злом и добром =) а тоесть 32bit и 64bit ядрами.
Я не буду приводить тут  длинные маты выдаваемые в консоль, а просто скажу как это вылечить и поставить MySQLdb и человечески пользоваться им.

1. Идем на официальный сайт MySQL и качаем дистриб MySQL и качаем от туда обязательно только 64bitную версию и устанавливаем. Процесс установки тут будет понятен, там инсталятор =)
2. Устанавливаем MySQLdb. Сразу подчеркну, не устанавливайте через easy_install бессмысленно, забудте этот вариант и качайте с сайта последние исходники. В консоли переходим в директорию в которую скачали пакет и выполняем поочередно:

macbook:~ akropotov$ tar xzf MySQL-python-1.2.3c1.tar.gz
macbook:~ akropotov$ cd MySQL-python-1.2.3c1
macbook:~ akropotov$ ARCHFLAGS='-arch x86_64' python setup.py build
macbook:~ akropotov$ ARCHFLAGS='-arch x86_64' python setup.py install

И на этой ноте заканчивается вся процедура установки

macbook:~ akropotov$ python
Python 2.7.1 (r271:86882M, Nov 30 2010, 10:35:34)
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
>>>

Удалить MySQL в Mac OS

Ну вот так вот сложилось что в маке нет человеческого способа удалить MySQL.
Удаляем вот таким вот способом:

macbook:~ akropotov$ sudo rm /usr/local/mysql
macbook:~ akropotov$ sudo rm -rf /usr/local/mysql*
macbook:~ akropotov$ sudo rm -rf /Library/StartupItems/MySQLCOM
macbook:~ akropotov$ sudo rm -rf /Library/PreferencePanes/My*
macbook:~ akropotov$ sudo vim /etc/hostconfig (удалите строку MYSQLCOM=-YES-)
macbook:~ akropotov$ sudo rm -rf /Library/Receipts/mysql*
macbook:~ akropotov$ sudo rm -rf /Library/Receipts/MySQL*

Вот и все скули как и не было на оси =)

PHP — нанесение рамки на изображение

По работе понадобилось нанести на все изображения сайта рамку. А так как на работе у меня windows 7 а не мак и из за большого объема изображений было решено накатать скриптик на php для реализации данной задачи.

#PHP#

$var_jpg = 80;
function save_img($i,$p,$r='')
{
	global $var_jpg;
	if($r=='gif')imagegif($i,$p.$r);
	elseif($r=='png')imagepng($i,$p.$r);
	else imagejpeg($i,$p.($r='jpg'),$var_jpg);
	return $r;
}
	function get_files($dir = "images"){
	$files = array();
	if ($handle = opendir($dir)) {
		while (false !== ($item = readdir($handle))) {
			if (is_file("$dir/$item")) {
				$files[] = "$dir/$item";
				$name_file_item = array_shift(explode(".", "$dir/$item")).".";
				$i=@imagecreatefromstring(file_get_contents("$dir/$item"));
				$img_color = imagecolorexactalpha($i, 250, 250, 250, 30);
				imagesetthickness($i, 10);
				$x = imagesx($i);
				$y = imagesy($i);
				imageline($i, 0, 0, 0, $y, $img_color);
				imageline($i, 5, 0, $x-6, 0, $img_color);
				imageline($i, $x-6, $y, 5, $y, $img_color);
				imageline($i, $x, $y, $x, 0, $img_color);
				save_img($i,$name_file_item,$r='');
			}
			elseif (is_dir("$dir/$item") && ($item != ".") && ($item != "..")){
				$files = array_merge($files, get_files("$dir/$item"));
			}
		}
		closedir($handle);
	}
	return $files;
}
get_files();

Сертификация 1c-bitrix

До сегодняшнего дня я уже имел три сертификата 1c-bitrix «Администрирование системы». И как то не обращал на них внимание, так как с битриксом в плотную не работал. И с тем фактом, что сейчас с данной системой работаю очень часто я возобновил получение сертификатов. Сегодня получил очередные сертификаты «Контент-менеджер» и «Многосайтовость» с чем я себя и поздравляю. По планам до конца недели сделать еще парочку сертификатов и так же восстановить свои сертификаты от «Специалиста».

Мои сертификаты можно посмотреть в соответствующем разделе

Django 1.3 released

Давно ожидал этого релиза. Последний проект уже написанный на нем полноправно функционирует на просторах инета.

After many months of work, we’re proud to announce the release today of Django 1.3. There’s plenty of cool stuff in this release, and the release notes cover it all in detail. You can also swing by the downloads page to grab a copy of the release package. And as always, signed checksums for the release package are available.

One important point is worth mentioning here, however: Django 1.3 is, as covered in the release notes, the last official release of Django which will support Python 2.4. When Django 1.4 is released, the minimum Python version required will be 2.5, though you’ll still be able to use Django 1.3 — during its security support lifecycle — if you need Python 2.4 support.

Finally, we’d like to point out, as always, that we couldn’t do this without the help of the huge numbers of people all around the world who contribute to and improve Django every single day. All of you should give yourselves a big pat on the back.

 

MediaWiki — создание алфавитного указателя

По работе на одном из сайтов работающем на MediaWiki понадобилось сделать так называемый алфавитный указатель для поиска страниц. Немного почитав оказалось, что это делается незамысловатым способом, а именно. Например мне надо на главную страницу вывести как раз таки этот блок с указателями.
1. Создаем страницу «Шаблон:Алфавитный_указатель» с содержимым

{| id="toc" style="margin: 0 2em 0 2em;"
|-
| style="background:#ccccff" align="center" |'''Алфавитный указатель'''
|-
| align="center" style="font-size: 90%;" |
[[Special:Allpages/0-9|0-9]] |
[[Special:Allpages/А|А]] |
[[Special:Allpages/Б|Б]] |
[[Special:Allpages/В|В]] |
[[Special:Allpages/Г|Г]] |
[[Special:Allpages/Д|Д]] |
[[Special:Allpages/Е|Е]] |
[[Special:Allpages/Ё|Ё]] |
[[Special:Allpages/Ж|Ж]] |
[[Special:Allpages/З|З]] |
[[Special:Allpages/И|И]] |
[[Special:Allpages/Й|Й]] |
[[Special:Allpages/К|К]] |
[[Special:Allpages/Л|Л]] |
[[Special:Allpages/М|М]] |
[[Special:Allpages/Н|Н]] |
[[Special:Allpages/О|О]] |
[[Special:Allpages/П|П]] |
[[Special:Allpages/Р|Р]] |
[[Special:Allpages/С|С]] |
[[Special:Allpages/Т|Т]] |
[[Special:Allpages/У|У]] |
[[Special:Allpages/Ф|Ф]] |
[[Special:Allpages/Х|Х]] |
[[Special:Allpages/Ц|Ц]] |
[[Special:Allpages/Ч|Ч]] |
[[Special:Allpages/Ш|Ш]] |
[[Special:Allpages/Щ|Щ]] |
[[Special:Allpages/Ъ|Ъ]] |
[[Special:Allpages/Ы|Ы]] |
[[Special:Allpages/Ь|Ь]] |
[[Special:Allpages/Э|Э]] |
[[Special:Allpages/Ю|Ю]] |
[[Special:Allpages/Я|Я]]
|}


2. В главную страницу просто добавляете такой вот элемент

{{Алфавитный указатель }}

Поиск без учета регистра __icontains

Такая ситуация.
Сайт работает на хостинге ht-systems.ru
База PostgreSQL

>>> import django
>>> django.VERSION
(1, 1, 0, 'final', 0)

Имею пару вьющек для поиска
В первой

if request.GET.get('nameVacancy', False):
    argv_filter['title__icontains'] = request.GET['nameVacancy']
vacancy_list = Vacancy.objects.filter(**argv_filter)

Во второй

for resume in request.GET.get('keyword', False).split(','):
    if resume != '':
        argv_keyword.add(Q(title__icontains=resume.strip()), Q.OR)
        argv_keyword.add(Q(professional_skills__icontains=resume.strip()), Q.OR)
 resume_list = Resume.objects.filter(status=1).filter(argv_keyword)

На десктопе все работает и поиск идет без учета регистра как и предполагает __icontain, стоит все это дело выгрузить на сервер все перестает работать. То есть регистр учитывается, ищет только если задаю полное значение с полным совпадением регистра.

Кто сталкивался с этим или знает как это лечиться, растолкуйте плиз.

Аркадий Чумаченко
Смотрите активную локаль в PostgreSQL. LC_COLLATE, LC_CTYPE и все такое. Особенно если на латинице поиск работает правильно.

Домены от ispserver.com

Вот решил тут под новый проект взять домен там же где и хостинг, а именно в ispserver.com. После всех технических работ с сайтом было необходимо прописать в домен NS и начать работу сайта. Но увы ( После того как NS были прописаны я ждал домена на сайте 3 дня. Как то это не по человечески, тем более в тех поддержке говорят извините это тупит наш регистратор у кого мы домены берем. Но черт возьми у меня половина доменов зарегистрированы в reggi.ru они тоже не крайние регистраторы, но почему то все отлично работает.