воскресенье, 4 декабря 2011 г.

переменные $_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW'] если PHP в режиме CGI

Если у вас PHP работает в режиме CGI то с HTTP авторизацией возникнут проблемы, т.к у вас просто не будет необходимых переменных, что бы решить эту проблему добавьте в .htaccess следующие строчки:


RewriteEngine on
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]

а в  PHP скрипте где используете HTTP авторизацию, перед проверкой добавьте следующий код:


list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['REDIRECT_REMOTE_USER'], 6)));


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

Cs-cart блок корзины

У cs-cart по-умолчанию нет блока с корзиной, это весьма не удобно, конечно ихняя родная корзина симпатичная и можно даже скачать, что удобная, но у нее есть один громадный недостаток - её не замечают! Люди привыкли

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

Корзина с добавленными товарами

Можно удобно, без перезагрузки страницы, добавлять товары и удалять из корзины. В планах - доделать возможность изменять количество товаров в корзине.




пятница, 4 ноября 2011 г.

Как отключить Skype-подсветку номеров на странице

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


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



‹meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" /›

Так же есть еще  варианты если необходимо убрать подсветку  только с определенных номеров, для этого нужно использовать теги ‹noskype› или ‹noscript›: 
+8 (044) ‹noskype›‹/noskype›333-22-32
  1. +8 (044) ‹noscript›‹/noscript›333-22-32

четверг, 3 ноября 2011 г.

Любите когда с вами обращаются как с быдлом? Тогда становитесь клиентами Приватбанка.

За свою жизнь не встречал конторы где с клиентами обращаются хуже чем Приватбанк, к сожалению около 2х лет являюсь ихним клиентом, но теперь уже точно найду другой банк. У моей карты Visa заканчивался срок обслуживания, за 2 недели до окончания я позвонил в Приватбанк и уточнил, что мне делать, они сказали что сняли с меня деньги за обслуживания и карту перевыпустят автоматом, что 1го числа она уже будет в отделении. Сегодня поехал, отстоял час в очереди и что я услышал: нет вашу карту не перевыпустили, сейчас подадим заявку, недели через 2 она будет, пипец, как так можно, не банк а черти что! Никому не советую с ними связываться.

понедельник, 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 для фриланса, уже много раз начинал, но так и не закончил, а вот эта библиотека мне думаю поможет в построении интерфейсов.

четверг, 29 сентября 2011 г.

MySQL: UPDATE вместе с JOIN

Рассмотрим на примере, запрос к базе CS Cart, если кому любопытно

UPDATE `cscart_products_categories` c // таблица в которой нам необходимо произвести обновление 
 LEFT JOIN cscart_product_features_values v  ON c.product_id=v.product_id  //Присоединяем другую таблицу
SET c.category_id=181 // а вот уже и то что нам нужно обновить
WHERE v.variant_id=2886 AND c.category_id=114 //условия

среда, 28 сентября 2011 г.

Windows 8 на нетбуке Samsung N143

До этого у меня была установлена Windows 7, в принципе полет нормальный,хотя и всего 1 гиг ОЗУ. Но вот вышла Windows 8 dev версия и я решил испытать её, был приятно удивлен с самого начала - довольно быстро установилась с флешки.

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

Конечно система внешне очень похожа на Win7 но с некоторыми удобными отличиями, очень удобный диспечер задач, новое более удобное окно копирования, более функциональный проводник.

Так же большой плюс в том что система грузится куда быстрее семерки.  И все казалось круто, установил весь нужный софт - все работает, я был счастлив, до того момента как втыкнул в нетбук USB 3G модем Pantech. Драйвера на него система не нашла, и не схотела скушать те что я ей подсунул(из 7ки). Решения пока не нашел, но очень хочется :)

Последняя работа на WebAsyst www.mulin-rouge.com.ua

OpenCart - название сайта в TITLE

Иногда необходимо в TITLE дописать название сайта, или еще что-то. У меня задача оказалась чуть сложнее - если в админке не прописан title для категории то тогда дописываем, а если прописан то не дописываем :) На операционный стол к нам попадает файлик catalog/controller/product/category.php У меня на 46-47 строчке, у вас не знаю, но ищите что то вроде

		if ($category_info) {
	  		$this->document->title =

И вот строку $this->document->title = .... модифицируем

$this->document->title = ($category_info['title']) ? $category_info['title']: $category_info['name'].' нужный нам заголовок ';

т.е скрипт смотрит если уникальный титл для категории не задан то он будет выводить название категории + то что мы допишем. Я это проделывал на версии 1.0.x, но думаю что и в других версиях делается примерно так же.

вторник, 27 сентября 2011 г.

WordPress убрать статьи с главной страницы


Иногда хочется что бы некоторые посты не попадали на главную, для этого есть простое решение - заходим в папку с темой, находим файлик functions.php и вставляем туда следующую функцию



function removeCat($query) {

     if ($query->is_feed || ($query->is_home && !(is_paged()))) 
     $query->set('cat','-24');
     return $query;
}
add_filter('pre_get_posts','removeCat');
-24 - это ID категории, посты которой не будут видны не на главной, не в RSS.