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

Javascript — передача параметра в модальное окно fancybox

Вроде элементарное ТЗ — а промучался полдня.
При клике на «купить» — должно появляться модальное окно «Товар добавлен в корзину» «продолжить покупки» «оформить заказ»
В качестве модального окошка решено использовать скриптик JancyBox — и центрируется и затемняет, в общем всё устраивает!
кроме одного НО! — при нажатии на «купить» товар сначала должен «упасть» в корзину, т.е. нужно вызвать соответствующую функцию с передачей в качестве параметра ID товара

Buy 1111
Buy 2222
$(".modal").fancybox({
	'onStart': function() { 
    	      var id = $(this).attr('rel');
              alert(id);     
           }
});

Так не пашет! — даёт «undefined»

Как вариант — повесить сначала click — в нём сделать нужный вызов, а потом открыть окно имитацией клика
$(«#id2»).trigger(‘click’);

    $("#id1").click(function() {     
    	var id = $(this).attr('rel');
    	$("#inline1").html(id);
	$("#id2").trigger('click');
    });

Но почему-то в таком варианте модальное окно выводится сначала вверх потом только центрируется. Облом!

Гуглим далее — нашел свою обработку Тайтла с помощью собственной фукнции вешаемой параметром TitleFormat
Внутри которой дёрнуть rel можно следующим образом $(currentArray[currentIndex]).attr(‘rel’)

Т.е. вместо задания тайтла я получу ID и вызову нужную мне функцию.

На этом «мудрёном» варианте и остановлюсь — через задний проход конечно, но работает 🙂

P.S.
С вопросом по решению проблемы я создал 3 поста на форумах
phpclub.ru
javascript.ru/forum/
forum.searchengines.ru

На первом ноль реакции, на втором попытались помочь — но безуспешно
На javascript.ru/forum — 200 % попадание в цель!
На основе моего вопроса был создан готовый рабочий пример! В личке вебмастер ответил на мой вопрос — откуда именно инфа с указанием прямых ссылок на нужный мне пример в мануале!

Собственно, как обычно
Рони ответил в ПМ — за что ему ещё раз огромное спасибо!

Как обычно — всё гениальное просто — «Meditate on documentation!»

Дока тут http://fancyapps.com/fancybox/
Пример с передачей ID тут http://jsfiddle.net/Se8Yu/

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

18 Ноябрь 2013

Как найти php скрипт — mail спамер?

Утро понедельника не задалось — при прочтении утренней почты обнаруживаю абузу с датацентра на один из моих серверов 🙁
При ознакомлении выясняется, что мне закинули какой то «сифак», который благополучно спамит добропорядочных граждан «via sendmail with smtp»

Предположив, что сиё действо выполняется с какого-то php скриптика сразу же встал вопрос о методе его поиска! Собственно — как?
Через мои защиты он уже каким то образом пролез, значит моими регулярками его не выцепить!
В идеале фукнцию отправки почты логировать — а там то я бы его по факту обнаружил!

Оказывается, начиная с PHP 5.3 такая возможность присутствует! и имея ей MAILHEAD

Пересобираем php с указанным выше патчем:

(инструкция для FreeBSD):
смотрим какая версия PHP
#php -v

у меня 5.3
#cd /usr/ports/lang/php53
#make config
отмечаем [X] MAILHEAD Enable mail header patch
#make
как все соберется без ошибок
#make deinstall
#make install clean

Далее в php.ini указываем куда писать лог
mail.log = /var/log/php-mail.log

рестартим веб сервер и делаем тестовую отправку

$to      = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);

проверяем лог — если скрипт попал в лог — всё окей

Далее ловим гада.

Добавлю ещё выдержку со статьи:
Чтобы найти источник спам-рассылки на сайте, нужно в файле php.ini включить логирование рассылаемой почты директивами:

mail.add_x_header = On
mail.log = <путь до вашего пользовательского каталога>/php-mail.log

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

php_admin_value mail.add_x_header On
php_admin_value mail.log <путь до вашего пользовательского каталога>/php-mail.log

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

18 Ноябрь 2013

В индексе Яндекса только главная страница

Уже не в первый раз сталкиваюсь с пока не ясной мне проблемой — Яндекс ставит в выдачу только главную страницу сайта.
Вот и сейчас — сайтик белый, нигде не был замечен с плохой стороны — никакой рекламы, ссылок, попапов и прочей гадости.
Нужно продвинуть по запросу Ремонт ТНВД — а в индексе только морда, значит Яше явно что-то не нравится в сайте!
Вопрос — что именно?
В Я.Вебмастер показывает, что загружено 27 страниц, в выдаче одна.
Почему — ХЗ 🙁

Будет информация — напишу сюда. А пока — вопрос актуален !

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

14 Ноябрь 2013

Битрикс — иерархическое многоуровневое меню «гармошка»

Итак, очередное ТЗ для Битрикс CMS — иерархическое многоуровневое меню «гармошка».
Реализацию сей задачи я конечно-же задумал с использованием какого-нить плагинчика с использованием jQuery (а куда без него в наше время ?), немного поиска и небольшой,
вполне устраивающий меня плагин найден — liHarmonica

Демка пашет, всё вроде бы просто, НО — как мне вытащить из Битрикса секции и иерархическом порядке?

Готового подходящего решения в API я не нашел, подходит только CIBlockSection::GetList() и рекурсивная функция по получению подсекций в конкретной секции.
Пихать непосредственно CIBlockSection::GetList() в рекурсивную фукнцию — убийство т.к. для каждой секции будет своё обращение в БД — слишком большая нагрузка для получения меню.

Как решение — сначала «дёрнуть» все секции в массив, и в дальнейшем работать уже с ним.
Ну для правильного кэширования всего задуманного, нужно будет запихать всё в компонент.

Сказано — сделано 🙂
Код в студию

component.php

if($this->StartResultCache(false, array($arParams["SECTION"],$arParams["ID"]))){
    CModule::IncludeModule("iblock");

    $arResult = array();
    $arResult['TIME'] = time();    
    
    $arFilter = Array('IBLOCK_ID'=>$arParams["IBLOCK_ID"], 'ACTIVE'=>'Y');
    $db_list = CIBlockSection::GetList(Array("sort"=>"asc"), $arFilter, false);
    while($ar_result = $db_list->GetNext()) {
	$sect_id = $ar_result['IBLOCK_SECTION_ID'];	
	if(!$sect_id) $sect_id=0;
		
	$arr[$sect_id][]= array ('ID'=>$ar_result['ID'], 'NAME'=>$ar_result['NAME']);    
    }
    
    $arResult['TREE'] = $arr;

    $this->SetResultCacheKeys(array('TREE'));
    $this->IncludeComponentTemplate();
}


template.php

    $value) { $id = $value["ID"]; $name = $value["NAME"]; if ($sec==$id) $class = 'class="cur"'; else $class =''; if (!is_array($arr[$id])) { echo "
  • $name
  • \n"; } else { echo "
  • $name
      \n"; print_menu($arr,$sec,$id); echo "
  • \n"; } } } ?>

P.S.
Блин, всего несколько строчек кода — а убил полдня на менюшку эту.
Кому интересно — качнуть готовый компонент можно тут, посмотреть реализацию тут.
(пути до js и css подкорректировать только нужно — у меня это в нескольких шаблонах используется, поэтому выносил в корень).

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

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