Мобильный офис

28 Ноябрь 2010 2 comments

Наконец-то в этом году дорос до своего офиса, офис небольшой, 25 метров, но зато в хорошем бизнес центре, рядом две ветки метро, не отшиб в общем, да и штат пока небольшой – вполне хватит. Стены есть, мебель тоже, дело дошло до следующего важного этапа – интернет и телефон/факс. Узнав цену на инет и телефон в нашем бизнес центре я вошел в состояние ступора минут на 15, т к суммарная цена равнялась 60% стоимости аренды – в топку, да и неудобно, офис все равно этот временный, потом переезжать, все заново настраивать в новом месте, надо что то было придумать мобильное.

Интернет можно через модем, 3G или Yota, по отзывам йотовцев, днем в Питере 4G лагает, 3G потестировали, он с утра и вечером разгоняется до 3.6 мегабит, днем полтора-два, пойдет.

Порылся в сети, оказалось есть роутеры под 3 джи модемы от DLink, есть которые просто идут с USB портами, те надо перепрошивать, а DIR 412 сразу заточен под 3джи, но можно перепрошивать и под Yota. Минус 412 в том, что у него всего 1 Ethernet порт, но мне это было не принципиально, т к в офисе хочу видеть как можно меньше проводов, так что все компы будут инет “сосать” по WiFi. Прошивка 412 сразу содержит перечень настроек основных российских поставщиков 3g интернета, правда все настройки зашиты на Москву, но это все исправимо.

DLink DIR-412

Если на компьютере отсутствует WiFi, тогда на него ставится беспроводной сетевой адаптер, я взял такой netgear wna1000.

netgear wna1000

Вместо астрономической цифры за инет в месяц, все оборудование мне обошлось примерно в 5 000 рублей и 400 рублей в месяц за безлимитный 3g интернет.

С факсом если честно не знал что делать, т к дел с ним вообще никогда не имел, но людям надо, куда денешься. Подсказал мне один клиент, он использует у себя в офисе gsm-шлюз – устройство внешне похожа на adsl-роутер, только туда вставляется обычная симка, к шлюзу подключается телефон, хоть с крутилкой и можно звонить или подключается факс.

Купил себе Termit VoiceFax с поддержкой аналогового факса, подрубил к нему мфу и избавился от всех проблем.

Termit VoiceFax

Теперь могу хоть в чистом поле работать, лишь бы там было 220 и сотовая связь =)

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники

домены РФ

12 Ноябрь 2010 Нет комментариев

С 11 ноября 2010 года началась регистрация доменов РФ, мое личное отношение к этим доменам двойственное – вроде как полная туфта, а вроде для сугубо внутренних ресурсов очень даже ничего, “розовым” мозгам будет проще запоминать и набирать адреса их любимых сайтов. В ру центре регистрация рф домена стоит 600 р – обдиралово, другие регистраторы отдают домены по 140 рублей, например мастерхост, но меня ждала приятная неожиданность от ру центра, зайдя под партнерским договором регистрация домена рф стоила 90 рублей, взял себе парочку, заодно и для этого сайта зарегистрировал пхплансер.рф

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Categories: Новости Tags:

велосипед с квадратными колесами или делаем свой шаблонизатор

Наверно любой веб-программист проходит через изобретение своего собственного “велосипеда”, часто который получается с квадратными колесами. Много девелоперов стряпают свои cms, многие к ним разрабатывают свои шаблонизаторы – я не исключение.
CMS своя у меня уже есть, в качестве шаблонизатора юзал smarty, с xlst как-то вообще не сраслось из-за показавшейся сложности. Smarty юзал очень долго, но всегда бесило в нем то, что не хватало каких-то в шаблоне функций, дописывать плагины запарно на каждую мелкую функцию php, так же бесило вставлять {literal} в javascript – очень отягощает отладку, когда забываешь их вставить.

От шаблонизатора хотелось:

  • использовать в шаблоне чистый php <?php echo $this -> peremennay; ?>
  • не иметь никаких там кеширований, т к за это у меня отвечает cms
  • не иметь ничего лишнего, кроме передачи переменных в шаблон и вывод шаблона браузеру
  • имена функций передачи данных и отображения данных должны совпадать с именами в Smarty (дабы не лопатить кучу кода, да и дело привычки).
  • так же нужна была возможность подгрузки каких-то своих плагинов, для решения задач именно вывода данных.
  • возможность инклудов шаблонов внутри шаблона (include_tpl)

В итоге за пару часов накидал свой шаблонизатор:

  • передача переменных в шаблон assign( $varName, $varValue = null ) – аналогично как в смарти, можно передавать как 1 переменную, так и массив переменных
  • clear_assign( $varName ) – стереть переменную
  • clear_assign_all( ) – стереть все переменные
  • get( $varName ) – получить значение переменной
  • fetch( $template_name ) – получить результат работы шаблона
  • display( $template_name ) – вывести на экран шаблон
  • include_tpl( $template_name ) – подключить внутри шаблона другой шаблон

При вызове шаблонизатора конструктору передается путь к папке с шаблонами и разделитель директорий, по умолчанию ‘/':
$template = new Template( $path );
Путь к папке с шаблонами можно изменить, передав новое значение $template -> template_dir = ‘new path';

Плагины складываются в папку plugins, имя файла с плагином должно иметь имя вызываемой функции. Например если в шаблоне вызываем <?php echo $this -> return_ext( $var ); ?>, тогда в папке с плагинами должен лежать файл return_ext.php, с функцией function template_function_return_ext($string). Плагины не загружаются вместе с шаблонизатором, а подгружаются только в случае вызова функции в шаблоне.

Пример использование:

test.php:

<?php

$template = new Template( ‘/path’ );

$template -> assign( ‘word’, ‘Hello world’ );

$template -> display( ‘first_template.php’ );

?>

first_template.php:

<strong><?php echo $this -> word;?></strong>

Результат, в браузер выведется: Hello world

Ничего сверхгениального тут не изобретено, многое взято со smarty, просто переписано на свой лад, кому интересно использование, можете скачать архив.

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Categories: Новости Tags:

Интеграция phpbb со своей CMS

29 Сентябрь 2010 6 comments

Тема оказалась очень популярной в инете, сам phpbb юзал, но вот интегрировать с cms не приходилось. ББ оказалась заразой редкостной, в сети куча рецептов, но почему-то с phpbb 3, который стоит у меня не срабатывали, удалось на буржуйском сайте найти рецепт, который после напильника заработал у меня. Еще кстати очень полезный в этом деле ресурс http://wiki.phpbb.com
Итак, что мне надо от этой интеграции:

  1. чтобы при регистрации на сайте юзеры попадали в базу cms и в базу phpbb
  2. при авторизации на сайте юзер авторизовывался и на форуме
  3. при выходе на сайте, выходил бы и на форуме

Первый пункт оказался самым простым, чтобы добавить грамотно юзера в базу надо сделать 2 запроса в базу:

$user_actkey = md5(rand(0, 100) . time());
$user_actkey = substr($user_actkey, 0, rand(8, 12));
$sql  = "INSERT INTO `phpbb_users` (`user_type`, `group_id`,   `user_perm_from`, `user_ip`, `user_regdate`, `username`,  `username_clean`, `user_password`, `user_passchg`, `user_pass_convert`,   `user_email`, `user_email_hash`, `user_birthday`, `user_lastvisit`,  `user_lastmark`, `user_lastpost_time`, `user_lastpage`,   `user_last_confirm_key`, `user_last_search`,  `user_warnings`,`user_last_warning`,`user_login_attempts`,  `user_inactive_reason`, `user_inactive_time`, `user_posts`, `user_lang`,  `user_timezone`,`user_dst`,       `user_dateformat`, `user_style`,  `user_rank`, `user_colour`, `user_new_privmsg`, `user_unread_privmsg`,  `user_last_privmsg`, `user_message_rules`, `user_full_folder`,    `user_emailtime`, `user_topic_show_days`, `user_topic_sortby_type`,  `user_topic_sortby_dir`, `user_post_show_days`, `user_post_sortby_type`,  `user_post_sortby_dir`, `user_notify`, `user_notify_pm`,  `user_notify_type`, `user_allow_pm`, `user_allow_viewonline`,  `user_allow_viewemail`, `user_allow_massemail`, `user_options`,  `user_avatar`, `user_avatar_type`, `user_avatar_width`,  `user_avatar_height`,`user_sig`, `user_sig_bbcode_uid`,  `user_sig_bbcode_bitfield`, `user_from`, `user_icq`, `user_aim`,  `user_yim`, `user_msnm`, `user_jabber`, `user_website`, `user_occ`,  `user_interests`, `user_actkey`,`user_newpasswd`, `user_form_salt`,  `user_new`, `user_reminded`, `user_reminded_time`) VALUES
( 0, 2, 0, '{$_SERVER['REMOTE_ADDR']}', {$time}, '".CMS::addslashes($_POST['userLogin'])."', '".CMS::addslashes($_POST['userLogin'])."', '".md5($_POST['userPassword'])."', {$time}, 0,
'".CMS::addslashes($_POST['userEmail'])."',  ".sprintf('%u', crc32(strtolower($_POST['userEmail']))) .  strlen($_POST['userEmail']).", '', {$time},{$time}, 0, '', '', 0, 0, 0,  0, 0, 0, 0, 'ru', 0.00, 0, '|d M Y|, H:i', 1, 0, '', 0, 0, 0, 0, -3, 0,  0,
't', 'd', 0, 't', 'a', 0, 1, 0, 1, 1, 1, 1, 230271, '', 0, 0, 0,  '', '', '', '', '', '', '', '', '', '', '', '', '{$user_actkey}', '',  'badb8e6fcb48bb00', 1, 0, 0);
";
$db1 -> QueryExec( $sql );
$id = mysql_insert_id();
$sql = "INSERT INTO `phpbb_user_group` (`group_id`, `user_id`, `group_leader`, `user_pending`) VALUES
(2, {$id}, 0, 0),
(7, {$id}, 0, 0)";
$db1 -> QueryExec( $sql );

Во втором запросе group_id = 2 и 7, в вашем случае могут быть другие айдишники, у меня это айдишники из таблицы phpbb_groups, соответствуют группам REGISTERED и NEWLY_REGISTERED.

Дальше идет интеграция авторизации CMS с авторизацией форума phpBB:
Пишем функцию, да, именно функцию, иначе могут быть проблемы.

function login($id)
{
define('IN_PHPBB', true);
global $db, $cache, $config, $user, $phpbb_root_path, $phpEx;
$phpbb_root_path = [тут путь к папке с форумом].'/forum/';
$phpEx = "php";
include_once($phpbb_root_path.'common.'.$phpEx);
$user->session_begin();
//Signin automaticly for phpBB3
$user->session_create($id, true, true, true);
return true;
}

Перед вызовом функции делаете запрос в базу, для получения id юзера:

$sql = "SELECT user_id FROM phpbb_users WHERE username='".addslashes($_POST['login'])."'";
$res = $db1 -> Query($sql);
if( $db1 -> max > 0 ) {
login( $res[0]['user_id'] );
}

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

function loginout()
{
define('IN_PHPBB', true);
global $db, $cache, $config, $user, $phpbb_root_path, $phpEx;
$phpbb_root_path = $phpbb_root_path = [тут путь к папке с форумом].'/forum/';
$phpEx = "php";
include_once($phpbb_root_path.'common.'.$phpEx);
$user->session_kill();
return true;
}

Все готово, все 3 пункта выполнены, на этот левел ап у меня ушло 4 часа.

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники

Многоязычность в проектах на php средствами gettext

10 Сентябрь 2010 Нет комментариев

Давно хотел написать про то, как использовать многоязычность с помощью gettext, наконец-то дошли руки, сам юзаю эту технологию наверно года 4. Материала по нему в сети полно, но на практике не всегда это дело работает сразу, причина находится очень долго и гугл в этом не всегда помощник. Опишу всю технологию с нуля и со всеми возможными припонами, с которыми столкнулся я.
При написании своей CMS мне понадобилось, чтобы интерфейс можно было переводить на любые языки. По старинке, текст в скриптах выносили в переменные, которые хранились в отдельном файле, под нужный язык подключали файл с нужным языком – не айс.
Библиотека Gettext намного облегчает задачу, можно в скриптах писать текст на привычном вам языке, но вот в таком виде: echo gettext(“Привет!”);
Так же можно делать так: _(“Привет!”);, но как показала практика, на некоторых серверах такая конструкция не прокатила, и еще не всегда проходит, когда текст в одинарных кавычках (‘), поэтому лучше всегда использовать echo gettext(“Привет”);
После того, как в вашей программе весь текст выводится в таком виде, вам потребуется этот текст как то передать переводчику. Для этого качаем бесплатную программу poedit. Есть версии под все распространенные ОСи.
Ставим прогу, запускаем, жмем Файл -> Создать каталог
В закладке Информация о проекте заполняем все поля, кроме Формы множественного числа, закладке Пути вставляем путь до своего проекта, жмем ок. Далее, меню Каталог -> Обновить из исходного кода, программа просканирует все файлы вашего проекта на наличие gettext, и выведет его в две колонки, колонка исходная и колонка перевода. На этом этапе может возникнуть ошибка, в которой будет что то про кодировку UTF-8, если у вас скрипты в этой кодировке, тогда идем в меню Файл – Установки – Парсер – PHP – Править – Поле: кодировка исходного кода меняем на –from-code=UTF-8, сохраняем и повторяем процедуру с обновлением каталога. После этого у вас сформировался файл с расширением .po – вот этот файл с программкой poedit передаете переводчику, он переводит и возвращает вам обратно, при пересохранении файла создается файл с расширением .mo – это бинарник, который и будет налету переводит наш проект на другой язык.
И так, в папке своего проекта создаем папку locale, допустим нам надо проект перевести с русского на английский, в папке locale создаем подпапку en, в ней LC_MESSAGES, куда кладем файлик с расширением .mo, пусть он будет messages.mo, имя файла важно для последующего подключения.
В начале своих скриптов, прописываем код:

//$_SESSION['lang'] - пусть в данной переменной передается

//выбранный язык ru или en
$charsets = array( 'ru' => 'ru_RU', 'en' => 'en_US' );
$locale = $charsets[$_SESSION['lang']];
$domain = 'messages';  //значение этой переменной должно совпадать с именем .mo файла
$locale_path = dirname(__FILE__).'/locale'; //путь к папке locale, должен быть полным, в моем случае dirname(__FILE__)
putenv('LC_ALL='.$locale);
putenv('LANG='.$locale);
putenv('LANGUAGE='.$locale);

if  (!setlocale (LC_ALL, $locale.'.utf8', $locale.'.utf-8',  $locale.'.UTF8', $locale.'.UTF-8', $_SESSION['lang'].'.utf-8',  $_SESSION['lang'].'.UTF-8', $_SESSION['lang'])) {
// Set current locale
setlocale(LC_MESSAGES, '');
}
bindtextdomain($domain, $locale_path);
bind_textdomain_codeset($domain, 'UTF-8'); //в случае если у вас utf-8
textdomain($domain);

И это все, далее текст echo gettext(“Привет!”); при значении $_SESSION['lang']=’en’ должен выводиться на английском Hello!
Если это не произошло…
1)проверяем, не включен ли на хостинге безопасный режим safe_mode, включен – вырубаем
если не помогло, то
2) пробуем заменить все LC_ALL, на LC_MESSAGES,
если не помогло, то
3) нужно убедиться, что на сервере стоит нужная локаль, если есть доступ к серверу по шелу, тогда вам поможет посмотреть список всех локалей команда locale -a, для английского языка это en_US.utf8, если локали нет, ее надо поставить, тут уже в гугл или саппорт.
если не помогло, то
4) возможно папку en надо переименовать в имя локали, вот тут надо перебрать все комбинации: en_US.utf8, en_US, en_US.utf-8, en_US.UTF8, en_US.UTF-8
С другими ситуациями я уже не сталкивался, поэтому если и это не сработало, придется вам “раскуривать” самостоятельно.

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Categories: Новости Tags: ,

установка zend studio 5.5 в windows 7

25 Июнь 2010 5 comments

Какая-то сволочь наградила меня сегодня, уже точнее вчера, вирусом, компьютерным. Года 3 ничего не ловил, а тут капец, ни один сайт с упоминанием антивируса не открывается, гугл тоже лежит, но какие -то сайт открываются пучком. При трассировке заблокированных сайтов трассировка даже с компа не уходит. Лечение касперычем, нодом и на сладкое доктор вебом ни к чему не привело, поубивало с 20 паразитов, а сайты как были залочены, так и остались. В добавок нашел в винде файл кейлогера, хех, который отправлял с моего компа все что я пишу. В общем винду хп снес, поставил windows 7, лицензия, был у меня диск. Ставлю свой любимый zend studio 5.5.1 и тут на тебе, после загрузочной заставки тишина. Самое интересное, что под той же самой семеркой на ноуте, зенд работает превосходно. После гугления, оказалось не я один такой, на форуме зенда есть даже рецепт как с переустановкой java можно решить траблу, но она не помогла, зенд завелся, но лагал безбожно – в топку. Но нашел вот тут: http://amxm.ru/?p=54 рецепт, и так как поставить zend studio 5.5.1 в windows 7:

  1. качаем и ставим zend studio 7 – в моем случае 7.2
  2. ставим любимый zend studio 5.5.1
  3. из папки с семеркой копируем папку jre и вставляем ее в папку с 5.5.1
  4. наслаждаемся работой зенда 5.5.1, семерку можно снести

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Categories: Новости Tags: ,

мой проект – Санкт-Петербургский стоматологическй портал www.zubastik.net

7 Декабрь 2009 2 comments

Идея создания сего творения созрела аж весной 2008 года. Почему именно такая идея? Да потому что у меня реально заболел зуб. В своем районе Питера, где я жил, куча клиник, а куда пойти не знаю, рысканье в интернете в поисках отзывов и цен не привели к желаемому результату , поэтому пришлось терпеть до выходных и ехать на Родину, где уже вся стоматология до боли с детства знакома.
В общем, этот случай, а так же веяние в воздухе таких слов как start up, web 2.0, натолкнуло меня на мысль, что пора сделать то, что поможет не только мне, но и тысячам людей в Санкт-Петербурге найти нужную им стоматологию. Было решено не замахиваться на всю Россию, планету, вселенную, ….., а только на Питер по двум причинам:

  1. подобных проектов глобального масштаба много и они как помойные ямы – обвешанны рекламой, абсолютно нечитабельные и по-моему туда ходят только поисковые роботы и шальные люди с поисковиков
  2. Питер большой и именно Питерских подобных проектов я не нашел
  3. у 70% стоматологических клиник Санкт-Петербурга нет сайтов, у тех у кого есть, читабельные и адекватные 80% – это мои личные исследования

Закипела работа, причем это кипение периодически останавливалось из-за кучи параллельных проектов и основной работы.
И так наступил долгожданный час икс, ноябрь 2009 года – проект готов. И так, основной концепт проекта:
Стоматологический портал Санкт-Петербурга www.zubastik.net предназначен для поиска стоматологических клиник, поиск осуществляется как по районам города и станциям метро, так и по перечням услуг стоматологических клиник и ценам на них. Каждую стоматологическую клинику можно посмотреть на карте google. На страницах портала публикуются новости об акциях в стоматологических клиниках. Каждый посетитель портала может оставлять отзыв о клинике или задать вопрос врачу.
Каждая стоматологическая клиника после регистрации получает свой сайт с адресом [логин].zubastik.net. Да, да – не просто страницу, а сайт с доменом третьего уровня. Как говорилось выше, у большинства стоматологических клиник Санкт-Петербурга не оказалось сайта. На таком сайте клиника может заполнить информацию с адресами своих клиник и услуг с ценами, может заполнить фотогалерею, вести свои новости, которые публикуются на первой странице портала, может вести раздел “Вопрос-Ответ”. Стоматологическая компания может размещать свои вакансии, для посетителей портала доступен поиск вакансий.
Все сервисы стоматологического портала Санкт-Петербурга www.zubastik.net абсолютно бесплатные.
Не плохо да? Жду от Вас комментариев по полезности моего творения, а так же пожелания по расширению сервисов. Тот набор функция, который имеет портал на сегодняшний день не окончателен и будет постоянно расширяться.

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Categories: Новости Tags:

INSERT UPDATE в одном флаконе

6 Октябрь 2009 3 comments

Довольно часто приходилось писать разного рода парсеры, например обновление товаров интернет-магазина из csv-файла. Вот при написание очередного такого творения столкнулся опять с затыком, который все-таки решил победить, а именно как одним запросом проверять есть ли товар в базе, если есть, то обновляем, если нет, то добавляем. В данном случае REPLACE не канает вообще, т к он при обновлении те ячейки, что трогать не надо, затирает нафиг. Делать в два запроса 1- проверка на наличие товара, 2 – добавляем/изменяем – это полный изврат, mysql.com ждет нас.

Курение манов на mysql.com привели к положительному результату уже на 15 минуте борьбы, все до отупения просто – нам поможет ON DUPLICATE KEY.

Итак приступим…

Дано:

Некая произвольная таблица с товарами

CREATE TABLE IF NOT EXISTS `tCatalogueGoods` (
`goodId` bigint(20) unsigned NOT NULL auto_increment,
`levelId` bigint(20) unsigned default ‘0’,
`goodName` varchar(255) default NULL,
`goodDescription` text,
`goodPrice` decimal(10,2) unsigned default ‘0.00’,
`goodCode` varchar(255) NOT NULL default ”,
PRIMARY KEY (`goodId`),
UNIQUE KEY `goodCode` (`goodCode`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

goodCode – в данном случае артикул товара, поле уникальное, по нему и будем обновлять.

INSERT INTO `s1_tCatalogueGood` (`goodId`, `levelId`, `goodName`, `goodDescription`, `goodPrice`, `goodCode`,) VALUES
(1, 1, ‘товар1′, ‘описание товар1′, 10.00, ‘8’),
(2, 2, ‘товар2′, ‘описание товар2′, 11.00, ‘9’),
(3, 1 , ‘товар3′, ‘описание товар3′, 12.00, ’10’);

Далее самое вкусное, само решение:

INSERT INTO `tCatalogueGood` (goodCode, goodPrice) VALUES (‘8′, 120)
ON DUPLICATE KEY UPDATE goodPrice=120

Что происходит? Мускул если не находит совпадение по уникальному полю goodCode, тогда добавляет новую запись, если находит, то обновляет нужную ячейку в записи.

В общем вот так довольно просто решил давнюю проблему.

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Categories: Новости Tags:

Функция постраничного вывода – пагинатор

20 Сентябрь 2009 1 комментарий

Копался тут в своих библиотеках и нарыл свою первую функцию!!! Функция постраничного разбиения – нынче в народе зовется “пагинатор” (paginator). Написал я сее творение аж в 2002 году, когда учил php еще по манам php3. Далее этот код перекачивал в мою CMS и стал там использоваться направо и налево, естественно мутируя под ЧПУ и требования сеошников – отслеживать чтобы при постраничном выводе не было дублей страниц.

Функция возвращает строку вида:

<< < 1 2 3 4 5 > >>

, где:

  • << – переход к самому первому блоку
  • < – переход к предыдущему блоку
  • > – переход к следующему блоку
  • >> – переход к последнему блоку

на входе имеет 4 параметра:

  • integer $total – общее количество страниц ( ceil(общее кол-во. записей / кол-во. записей на странице) )
  • integer $currentpage – номер текущей страницы ( отсчет идет от 0 )
  • string $link – какую ссылку вставлять в пагинаторе (пример: page.php?id=3&page = )
  • integer $block – по сколько страниц делать в блоке, в данном примере 5

Далее собственно сам код, он не претендует на оскара…

/**
* Создает постраничное разбиение
* @author PHPLancer 2002
*
* @param integer $total
* @param integer $currentpage
* @param string $link
* @param integer $block
* @return string
*/
function pageListing($total, $currentpage, $link, $block)
{
$j = 0;
$s = "";
$array = array();
for($i = 0, $max = ceil($total/$block); $i <= $max; $i++)  {
$array[$i] = $j;
$j += $block;
}

for($i = 0, $max = sizeof($array); $i < $max; $i++)   if($currentpage >= $array[$i]  &amp;amp;amp;&amp;amp;amp; $currentpage < $array[$i]+$block) break;

if($i > 0) $s .= "<a href=\"".$link.$array[0]."\"> << </a> <a href=\"".$link.($array[$i-1]+$block-1)."\" > < </a> \n";

$z  = (($array[$i]+$block) > $total) ?  $total : $array[$i+1];

for($j=$array[$i];$j<$z;$j++)  $s .= ($currentpage==$j) ?  "<span>".($j+1)." </span> " :  "<a href=\"".$link.$j."\">".($j+1)."</a>  \n";

$max = sizeof($array);

if($i<($max-2)) $s .= "<a href=\"".$link.$array[$i+1]."\" > >  </a> <a href=\"".$link.$array[$max-2]."\" > >> </a> \n";
return $s;
}

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Categories: Новости Tags:

Заметки по jquery

16 Сентябрь 2009 1 комментарий

В один прекрасный день моя жизнь стала проще – я познакомился с javascript фреймворком jquery. С этого прекрасного дня много воды утекло, много чего попробовано, изучено, измучено и забыто. Поэтому когда нужен очередной финт ушами на jquery надо вспоминать, где же я это применял, лопатить в коде – неудобно. Наверно есть какой то супер способ это все хранить, но я в меру своей самобытности до такого способа пока не допетрил, поэтому буду собирать это в своем блоге, заодно и другим понадобиться.

  1. получить текст из jquery select option: $(‘select option:selected’).text()
  2. получить доступ к элементу родительского окна из iframe: $(‘element’, window.parent.document).
  3. получить доступ к переменной родительского окна из iframe: parent.varName = 10;
  4. получить значение родительского элемента: (this).parents().filter(‘form’).attr(‘id’)
  5. проверить существование элемента на jquery: if ( $(‘#myDiv’).length ) $(‘#myDiv’).show();
  6. очистить форму на jquery $(“#myFormId”).clearForm();
  7. выборка инпутов по типу input[type=checkbox]
  8. добавить элемент в конец списка select $(“#color”).append( $(“<option value=’cream’>кремовый</option>”) );
  9. получить значение выбранного переключателя input:radio[name=auto]:checked’).val()
  10. сделать на jquery select option с определенным значением выбранным: $(‘#type option[value=\'0\']‘).attr(‘selected’, ‘selected’);
  11. получить доступ к DOM iframe через jQuery: $(‘#iframe_id’).contents().find(‘#element_id’);

Как проверить существование элемента?

Вы можете использовать свойство length набора jQuery, возвращенного селектором.

if ( $('#myDiv').length )
  $('#myDiv').show();

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Categories: Новости Tags: