понедельник, 31 октября 2011 г.

jQuery переключение checkbox как radio

А если подробнее, то иногда необходимо реализовать такое поведение группы чекбоксов, что бы они вели себе как радио батоны. Т.е если мы отмечаем один чекбокс то значение checked снимается с других, вобщем что бы нельзя было отметить больше одного checkbox в группе. Нашел хорошее решение на просторах интернета

Диапазон значений для INPUT поля

Иногда хочется установить некий диапазон для значений вводимых в поле, например не меньше 10 и не больше 20, сделать это можно разными способами, а можно просто воспользоваться jQuery плагином jstepper

У плагина есть все необходимые настройки, что бы настроить его под себя, работать с ним крайне легко и приятно.

вторник, 25 октября 2011 г.

PHP удалить все элементы массива со значением NULL

Есть много разных способов что бы удалить пустые или NULL элементы массива, но мне кажется что самый простой способ сделать так:
array_filter($array, 'strlen');
и всё - прощайте элементы массива со значением NULL
Если же необходимо удалить все пустые элементы, элементы NULL и элементы FALSE то вызываем ф-цию без аргумента
array_filter($array);

суббота, 22 октября 2011 г.

CS-Cart педеланная страница оформления заказа



Cs-cart изменение внешнего вида отображения товаров

Только внимательный пользователь заменит что такого варианта отображения по умолчанию нет в CS-CART. Это компактный список в котором вместо ячейки Артикул я вставил поле Количество. Конечно же для большинства магазинов пригодится и Артикул, но в данном случае мне он был не нужен. Согласитесь ведь такой вид отображения очень удобен для магазинов с большим количеством товаров, рассчитаных на массовую закупку товаров.

CS-Cart отображение товаров из подкатегорий в родительской категории

Как было:




















Как стало:






















Как вывести вино с обоев.

В моем случае выводить пришлось красное вино. В процессе гулянки было оставлено пятно, не маленькое такое, от красного вина на обоях. Думал что обоям хана и придется переклеивать, начал гуглить и собсвенно все писали так же - обоям хана. Но где то нашел один совет, что необходимо промокнуть пятно ванишем. Купил маленькую пачку Vanish - около 7грн, сделал раствор, намочил им тряпку и начал промокать обои, и о чудо, пятна как не бывало, аж офигел, не осталось не одного следа, при том что с момента запачкивания обоев прошло уже около суток.

воскресенье, 16 октября 2011 г.

Social Engine 4 защита от спама, ReCaptcha

Если вас достали гребанные спам боты, а родная капча не спасает от них, боты ее легко пробивают, в отличии от людей, то хорошим решением будет установить ReCaptcha вместо обычной, темболее что движок ее поддерживает, странно что нет надстройки в админке, но делается все очень просто. Идем по ссылке https://www.google.com/recaptcha/admin/create  добавляем свой сайт и получаем ключи.
Далее открываем файлик application/modules/User/Form/Signup/Account.php в редакторе и ищем следующий код



if (Engine_Api::_()->getApi('settings', 'core')->core_spam_signup) {
   $this->addElement('captcha', 'captcha', array(
  'description' => '_CAPTCHA_DESCRIPTION',
  'captcha' => 'image',
  'required' => true,
  'allowEmpty' => false,
  'captchaOptions' => array(
    'wordLen' => 6,
    'fontSize' => '30',
    'timeout' => 300,
    'imgDir' => APPLICATION_PATH . '/public/temporary/',
    'imgUrl' => $this->getView()->baseUrl().'/public/temporary',
    'font' => APPLICATION_PATH . '/application/modules/Core/externals/fonts/arial.ttf'
  )));
 }
и меняем его на следующий

if (Engine_Api::_()->getApi('settings', 'core')->core_spam_signup) {
   $this->addElement('captcha', 'captcha', array(
  'description' => '_CAPTCHA_DESCRIPTION',
  'captcha' => 'reCaptcha',
  'required' => true,
  'allowEmpty' => false,
  'captchaOptions' => array(
    'pubKey' => 'Your Public Key',
    'privKey' => 'Your Private Key',  
    'wordLen' => 6,
    'fontSize' => '30',
    'timeout' => 300,
    'imgDir' => APPLICATION_PATH . '/public/temporary/',
    'imgUrl' => $this->getView()->baseUrl().'/public/temporary',
    'font' => APPLICATION_PATH . '/application/modules/Core/externals/fonts/arial.ttf'
  )));
 }
   
Только не забудьте вписать свои ключи, все теперь если у вас в админке включена капча формы регистрации то вы увидете ReCaptcha и злобные спам боты не будут вам надоедать

суббота, 8 октября 2011 г.

Xbox 360 не открывается привод, мигает лампочка питания

Что общего у фраз из заголовка? То что это случилось с моим Xbox 360. Сразу скажу что финал у истории счастливый, но для тех кому интересны детали - история ниже.
Решил прошить Xbox 360 на LT+ 2.0, до этого недели 2 назад самостоятельно прошился на LT+ 1.91 без каких либо проблем.
Поэтому смело разобрал свой бокс, подсоединился к нему SATA кабелем, запустил Jungle Flasher, собрал прошивки и нажал заветную кнопку LiteOn Erase (да да привод LiteOn). После нажатия кнопки согласно инструкции быстренько выдернул питание с привода и всунул обратно, но 72й код привод мне так и не вернул, попробовал еще разок, но на этот раз у меня система зависла наглухо после возврата питания в привод бокса.

Подождав минут 5, отсоеденил сата кабель от привода, и через минуту комп оклимался, перезапустил бокс, вставил сата кабель и опять - система виснет. А на боксе постоянно быстро мигает кнопка питания(та что по центру). Тут я и заподозрил неладное... Но обосрался испугался тогда когда нажав на кнопку извелечения диска, ничего не произошло, привод никак не реагировал. Отсоеденив SATA кабель, что б мой ПК развис полез в гугл искать похожие случаи. И тут как бы все стало еще грустнее - на всех более-менее толковых форумах люди ставили одинаковый диагноз - или хана приводу, или же хана контроллеру. Оба варианта мне не подходили. Решив немного надурить бокс, попробовал перезагрузить систему с включенным SATA кабелем в бокс, но не тут то было - система просто не грузилась. Я был уже практически в отчаянии, когда в голову пришла замечательная идея.
С отсоединенным кабелем от бокса я запустил Jungle Flasher, выбрал порт на котором должен висеть привод, нажал еще раз LiteOn Erase и быстро вставил SATA кабель в привод, и о чудо ! Привод вернул статус 72, я нажал кнопочку Write и прошивка залилась. Перезагрузил привод и лампочка больше не мигала, попробовал нажать кнопку извлечения лотка привода, и УРА - он выехал. Скрутил бокс, засунул туда Gears of War 3 и все как по маслу.

Вот такой настоящий хорор для владельцев бокса :) Но теперь на консоли последняя прошивка и не думаю что в ближайшее время, а может и вообще, компания Microsoft решится на разработку новой системы защиты. После провала последней надеюсь они разочаровались.

Так что у кого консоль после прошивки издает такие же симптомы - быстро мигает лампочка посреди кнопки питания и не работает привод. Не спешите отчаиваться и бежать к мастеру. Попробуйте мой метод. Удачи!

CS-cart нормальные SEO url для русского языка

Cs-cart отличный скрипт интернет-магазина,  и SEO модуль там неплохой, но вот из-коробки он не умеет делать транслит русского языка. Т.е если название товара у нас на русском то он сгенерирует нам какой то бредовый урл, его потом конечно же можно изменить ручками, но кому это нужно, если это достаточно легко исправить.
Ищем /addons/seo/func.php

Там ищем функцию function fn_create_seo_name(
в ней комментируем строку $_object_name = fn_generate_name($object_name);
т.е делаем что бы стало так #$_object_name = fn_generate_name($object_name);
и под ней  добавляем

        $url = translitIt($object_name);
        $_object_name = preg_replace('/[^A-Za-z0-9_\-]/', '', $url);

Теперь необходимо в этот файлик добавить саму функцию  translitIt.
Давайте опустимся в самый низ файлика и перед ?>
Добавим нашу функцию


function translitIt($str)
{
    $tr = array(
        "А"=>"a","Б"=>"b","В"=>"v","Г"=>"g",
        "Д"=>"d","Е"=>"e","Ж"=>"j","З"=>"z","И"=>"i",
        "Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n",
        "О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t",
        "У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch",
        "Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"",
        "Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b",
        "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j",
        "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
        "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
        "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
        "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
        "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",
        " "=> "-", "."=> "", "/"=> "_"
    );
    return strtr($str,$tr);
}


саму функцию транслита можете взять любую другую, которая вам больше по нраву, но принцип то вы поняли :)

воскресенье, 2 октября 2011 г.

Парсинг xls, Spreadsheet_Excel_Reader oleread.inc и несколько часов головной боли.

Писал очередной модуль для Cs-cart, модуль для импортирования товаров из Excel файлов, родной модуль импорта не устраивает, поэтому было решено написать свой.

Все шло гладко и спустя пару часов модуль был готов, успешно протестирован на моем тестовом сервере и ничего не предвещало беды. Но вот когда залил и установил его на боевой сервер, при попытке импорта файла сервер начал кричать

Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 32 bytes) in /xxxxxxxx/Excel/oleread.inc on line 27

Это показалось очень странным, так как тестовый файлик всего 25кб, а на сервере для выполнения PHP скриптов отведено 64Мб.

Увеличение памяти в php.ini ничего не давало.
Много было чего предпринято и на что только не грешили, ничего не помогало..

Но вот чуть позже удалось получить от скрипта что-то новенькое, ругань такого содержания

Notice: Uninitialized string offset: 2199023255040 in xxx/oleread.inc on line 27

И тут уже мне помог великий Google, оказывается что на 64 битной системе функция

function GetInt4d($data, $pos) {
    return ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16) | (ord($data[$pos+3]) << 24); 
}

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

function GetInt4d($data, $pos)
{
 $value = ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16) | (ord($data[$pos+3]) << 24);
 if ($value>=4294967294)
 {
  $value=-2;
 }
 return $value;
}

Вроде как в последних версиях phpexcelreader эту багу починили, но она определенно потрепала мне нервы!

jQuery библиотека пользовательских интерфейсов

Нашел сегодня в сети интересную библиотеку для создания UI (user interface).

Пока что не работал с ней, но демо очень понравилось и большой плюс конечно же что она использует jQuery. ExtJS несомненно красивее, но в нем я не силен, и не смог толком осилить, толи из-за нехватки времени, толи из-за отсутствия нормально документации.

Демо: http://www.jeasyui.com/demo/index.php

 Думаю может все-таки наберусь терпения и напишу свою CRM для фриланса, уже много раз начинал, но так и не закончил, а вот эта библиотека мне думаю поможет в построении интерфейсов.