.
Место для Вашей рекламы
13 Сентябрь 2013

Битрикс и древовидные комментарии

Очередное ТЗ — подключить к сайту на Битриксе древовидные комментарии.
По началу рассматривался вариант с приобретением в маркете, но для начала решили попробовать бесплатный компонент древовидные комментарии к статьям comment.multilevel как пишет сам автор «основой стал компонент photogallery.detail.comment, из которого удалено все ненужное, а также добавлена возможность работать с кодами секций и элементов в режиме ЧПУ.»
Сразу отмечу, что для работы компонента потребуется модуль «Блоги» (для хранения комментариев) т.е. редакция продукта не ниже «Стандарт».
Далее всё по инструкции — ставим компонент, кастомизируем шаблон компонента.

P.S.
Премодерация комментариев включается в свойствах доступа блога.

рубрики: Bitrix, Полезности | 4 комментария

12 Сентябрь 2013

Парсинг XML формата CommerceML средствами PHP

Очередная задача — синхронизация цен на сайте по файлу-выгрузке из 1С 8.2.
В движке решил не копаться — найти цены в БД и напрямую их корректировать — ИМХО так будет проще, чем искать какие то сторонние спец.модули.
Вроде всё ясно — берём файл, парсим, апдейтим.
Как всегда не обошлось без НО.
Файл-выгрузка оказался в формате «CommerceML» в формате xml version=»1.0″ encoding=»UTF-16″ с кириллицей везде — даже в наименованиях секций.
В общем первые попытки парсинга с помощью simplexml и DomDocument не увенчались успехом, а вот XMLReader, как раз рассчитанный на обработку файлов больших объёмов (что нам и нужно — прайсы, как правило имеют особенность безгранично расти).

Пока не забыл — порекомендую отличнейшую статейку, найденную в процессе реализации задачи — XML для PHP-разработчиков: Часть 2. Расширенные методы парсинга XML — различные методы работы с XML, всё с примерами и описанием.

Далее: … так как порядок в файле всегда идёт АРТИКУЛ и далее ЦЕНА, то особенно заморачиваться с обработкой вложений я не стал … в итоге получился такой код:

open("price.xml");

$art="";
$cost=0;
$arr = array();

while ($reader->read()) {
	switch ($reader->nodeType) {	
		case (XMLREADER::ELEMENT):
			if ($reader->localName == "Артикул") {
				$reader->read();
				$art = $reader->value;
				if ($art!=""&&$cost!=0)	$arr[$art]=$cost;
			}
			if ($reader->localName == "ЦенаЗаЕдиницу") {
				$reader->read();
				$cost = $reader->value;
				if ($art!=""&&$cost!=0)	$arr[$art]=$cost;
			}	
   		}
}

// посмотрим что получилось
foreach($arr as $name=>$val) {
	echo $name." = ".$val."
"; // сюда добавлю код по обновлению цен в БД } ?>

рубрики: CMS, Полезности, Программирование | Комментарии (0)

11 Сентябрь 2013

Прием платежей на сайте. Робокасса плюс Битрикс … и другие

Итак — в эфире очередной обзорчик реализованной мной сегодня задачи, а конкретно:
Есть определенный сайт продающий информационный пакет (файлик).
Приём оплаты и рассылка файла была в ручном режиме:
ПОКУПАТЕЛЬ:
1. Заходим на сайт, читаем о способах оплаты, выбираем — вбиваем реквизиты, оплачиваем.
2. Даём знать о проведённой оплаты, ждём на мыло файл.
ПРОДАВЕЦ:
1. Получаем заявку — заходим в платежную систему, ищем оплату
2. Отправляем файлик на мыло оплатившего
3. При обновлении файла скидываем новую версию всем уже купившим.

При количестве купивших переваливших за 1000 уников процедура уже начала «напрягать»… и заказчик обратился ко мне с вопросом автоматизации процесса

1. Делаю автоматизацию на стороне сайта (загоняем скриптом оплативших пользователей в отдельную группу, которым даём возможность скачивать последнюю версию файла (с учётом кол-ва скачиваний))
2. Прикручиваем РОБОКАССУ для принятия платежей.

Платформа системы управления была БИТРИКС, но штатный интернет магазин я использовать не стал т.к. не позволила редакция продукта.
Соответственно, выбрал вариант прикручивания системы к любому движку на PHP.

Скачал демку, почитал документацию, настроил админку в панели робокассы
Далее всё предельно ясно и понятно:
Код в demo1.php формирует кнопку «оплатить» (этот код я перенёс «как есть») — далее всё на стороне робокассы.
По факту оплаты прилетает запрос на result.php куда я и запихал присвоение юзеру нужной группы
CUser::SetUserGroup($shp_item, array_merge(CUser::GetUserGroup($shp_item), array(9)));

В success.php поставил редирект на страничку где появляется ссылка на скачивание файла.

А теперь о подводном камне движка Битрик, с которым я немного поломал голову:

Сначала для проверки принадлежности использовал CSite::InGroup и всё вроде работало, пока не прикрутил Робокассу, которая меняет группу в онлайн режиме …
И тут-то оказалось, что данные хранятся в сессии поэтому необходим релогин на сайте, чтобы получить измененные данные! что меня в корне не устраивало
это как оказалось касается и всех методов получения группы глобального объекта $USER
Решение — запрос группы с передачей ID пользователя $arGroups = CUser::GetUserGroup($USER->GetID()) и проверка вхождения в массив нужной группы array_search($grpID, $arGroups)

Остальное прошло без запинок

рубрики: Bitrix, Полезности, Программирование | Комментарии (1)

10 Сентябрь 2013

PHP — кракозябры в subject при отправке письма фукнцией mail в кодировке utf-8

Сегодня ваял небольшой php скриптик по email рассылке (стандартная Битрикс не подошла, т.к. в процессе нужно было перегенерировать пароли и произвести ещё кое какие манипуляции).
Писал конечно же в кириллице, кодировку использовал utf-8 и собственно, столкнулся с проблемой:
При получении письма в теме были кракозябры (текст gmail видимо сам перекодировал — проблем не было).

Собственно, 3 минуты гугла и решение найдено

На всякий случай, код перепубликую у себя:

Читать полностью »

рубрики: Полезности, Программирование | Комментарии (0)

5 Сентябрь 2013

Битрикс. Учет скачиваний файла пользователями.

Итак, почти реализовал небольшое ТЗ — возможно кому-то пригодятся мои наработки…

Допустим, на сайте под управлением CMS Bitrix, необходимо определённому списку пользователей дать возможность скачивать определенный файл и фиксировать количество скачиваний.
Создаём группу для юзеров, которым можно скачивать (у меня получился ID=9)
На пользователей, вешаем пользовательское поле UF_CNT — куда будем складировать количество скачиваний файла.

Собственно — привожу содержимое скрипта, непосредственно «отдающего» нужный файл:

 $USER->GetID());
 $arParams["SELECT"] = array("UF_CNT");
 $arRes = CUser::GetList($by = 'ID', $order = 'ASC', $arFilter,$arParams);
 if($res = $arRes->Fetch()) {
    $plex_cnt = $res["UF_CNT"]+1;
 }

// обновляем
 $user = new CUser;
 $user->Update($USER->GetID(), array("UF_CNT" => $plex_cnt) );

// отдаём файл
 $filename = 'file-info.zip';
 header("Pragma: public"); 
 header("Expires: 0");
 header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
 header("Cache-Control: private", false); // нужен для некоторых браузеров
 header("Content-Type: application/force-download");
 header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
 header("Content-Transfer-Encoding: binary");
 header("Content-Length: ".filesize($filename));
 readfile("$filename");
 exit();
}

header('Location: ............'); 

Ну и ссылочку на данный скрипт отдаём только «правильным» пользователям. Проверка та-же if ( CSite::InGroup( array($gID))) { ….. }

Да, ещё момент — прямое скачивание файла file-info.zip нужно запретить в конфе nginx-а, т.к. именно он отвечает за отдачу статики location = /paht/file-info.zip { deny all }
(далеко не сразу этот момент вспомнил когда не мог понять — почему не работает запрет на скачивание именно этого файла установленный мной в .htaccess при правильной обработке в нём других правил)

рубрики: Bitrix, CMS | Комментарии (1)

2 Сентябрь 2013

vipmaster.net — перспективный SEO форум

Итак, прошу любить и жаловать VIPMaster — Форум ВебМастера и SEO оптимизатора.
Молодой, перспективный SEO форум. Приятный интерфейс со всеми удобными «фенечками» на движке IP.Board
Помимо прямого направления поисковой оптимизации, довольно плотно обсуждаются темы сайтостроения (Web-программирования,Услуги вебмастера), конвертации траяфика (электронная коммерция), коммерция(купля/продажа) и другие не менее интересные темы.
Не буду скрывать, что статья рекламная — и даже наоборот сделаю на этом акцент! Т.к. это говорит о том, что форумом занимаются, форум продвигают и вкладывают в него средства, а это уже залог успеха!
По сути, по настоящему живых SEO форумов не так много, и надеюсь vipmaster.net достигнет высот уровня searchengines.ru!
Форум модерируемый — никакого левого «шлака» нет — всё чётко, по полочкам.
В итоге — рекомендую и даже больше — призываю поддержать ребят на старте!

P.S.
Сам уже зарегался и думаю стану постоянным посетителем.

рубрики: SEO, Администрирование, Вёрстка, Программирование, Реклама, Сайтостроение | Комментарии (1)

Яндекс.Метрика