За месяц Август, 2010

linux - Добавляем локаль (locale) при помощи localedef

Если функции изменения регистра некорректно работают с русским текстом, и не помогает установка локали в php (функция setlocale), скорее всего, нужной локали просто нет на сервере.

Если имеется доступ по SSH, посмотреть список имеющихся локалей можно командой

locale -a

locale -a | grep ru_RU

Если нужной локали (обычно, требуется ru_RU.CP1251 - остальные, скорее всего уже установлены) нет, установить (добавить в систему) её можно командой localedef (в Linux):

localedef -c -i ru_RU -f CP1251 ru_RU.CP1251

Если интересуют подробности - можно почитать, man localedef (для начала).
http://unix1.jinr.ru/~lavr/locale-1251.html - более подробная информация

краткая памятка по locale

Конфигурация локали в Debian

dpkg-reconfigure locales

Опубликовано Август 27, 2010 | автор: levik  |  Нет комментариев »

drupal - шпаргалка по структуре

Из заметок по drupal уже были выбраны некоторые полезности drupal. В этом посте - неполная шпаргалка по структуре drupal.

В drupal все элементы (так называемые Ноды | node) хранятся в специальной таблице node . Начиная с версии __ появилась таблица node_revision(?), в которой хранятся истории изменений (nid -node ID, vid - reVision ID)

Ноды (Node) могут быть  различного типа (type). От самого простой - Page до замысловатых (товар в интернет магазине с кучей характеристик, галерея… )

Таксономия (taxonomy) в drupal - один из наиболее гибких и мощных инструментов. Она позволяет реализовать практически любую каталогизацию (категории в несколько уровней, теги, свойства и т.д.) для выбранного типа node

Таблица vocabulary (?) - “словарики” (терминов таксономии)   содержит типы возможных “терминов” (тэги, категории товаров, разделы и т.д.)

SELECT *
FROM `term_data` td
INNER JOIN `term_hierarchy` th ON td.tid = th.tid
WHERE td.vid =5';
--td.vid - как раз и есть id словаря (
select * FROM `node` n
INNER JOIN `content_type_type1` c1 ON n.nid = c1.nid
INNER JOIN `term_node` tn ON tn.nid = n.nid
--выбираем все ноды, связанные с CCK-типом type1 и таксономией
--(будут дубли, в оригинальном запросе требовалось дополнительное условие)

Таблицы типа content_type_type1 (вместо type1 может быть, например, product) создаются CCK-плагином. Плагин позволяет добавлять дополнительные поля (field_pole, field_newname) - все поля начинаются со префикса field_

таблицы с префиксом view_ относятся к плагину view (вид), который позволяет настраивать отображение группы элементов (нод).

Иногда в таблицах могут присутствовать нестандартные недокументированные поля (добавленные предыдущими разработчиками) - бывает всякое =)

Опубликовано Август 25, 2010 | автор: levik  |  Нет комментариев »

Непонятные Cookies: _utma, _utmb, _utmc, and _utmz

Иногда, при проверке установленных Cookies можно увидеть переменные с непонятными названиями : _utma, _utmb, _utmc …

Это может вызвать некоторое недоумение, особенно, если сам разработчик и ничего такого не припоминается.. В общем, поиск был недолгим. Странно, но Яндекс ничего интересного не выдал. (На первом месте - вообще стоял сайт “Urban Traffic Management & Control - UTMC”) Зато google порадовал.. да и не мудрено  - ведь такого рода кукисы имеют к Гуглу самое непосредственное отношение. Если быть точным - то к Google Analytics. (Возможно, Яндекс не интересуется технологиями конкурентов.. Ну или по крайней мере не подаёт виду)

И тут человек, мало-мальски знакомый с “аналитикой от гугл” должен догадаться, что именно их скрипт устанавливает эти куки. Действительно, на сайте, где были найдены _utmX переменные установлена статистика от гугл.

Краткое знакомство с переменными Cookies от Google Analytics

__utma – выдается при первом посещении сайта.

__utmb – переменная отслеживает время посещения сайта. При каждом заходе на страницу отмечает “переход”. Время жизни по умолчанию 30 минут.

__utmc – отслеживает закрытие браузера пользователем. Если при повторном заходе кука отсутствует, засчитывается новое посещение, независимо от _utmb

__utmz – переменная содержит информацию о переходе на сайт (реферер, реклама, ввод в адресной строке). Время жизни - 6 месяцев

__utmv – переменная используется для установки “собственной” пользовательской переменной (см Custom Variables).

__utmx – переменная нужна для Website Optimizer. Время жизни у куки _utmx – 2 года.

Более подробную информацию о переменных можно узнать в документации Google Analytics

ps. Из рекламы на ТВ “Израильский google отвечает запросом на запрос”

Опубликовано Август 20, 2010 | автор: levik  |  Комментарии (2) »

Как запустить скрипты по Cron-у но без крона?

Если на хостинге нет CRON-а, а выполнять скрипты по расписанию нужно, можно пойти на “хитрости” (Вариант с переходом на другой хостинг/тариф/выделенный не рассматривается, поскольку слишком прост)

Прочитал у Never LEX-а (вообще, на блоге можно найти много интересного) статью про CRON для бедных - вспомнил, как сталкивался с аналогичной задачей. В общем-то, идея схожая - при открытии web-страницы проверяем время последнего выполнения скрипта (используем специальный файл) и, при необходимости, запускаем скрипт.

От варианта, предложенного Lex-ом мой а-ля cron отличают всего лишь несколько моментов:

В файл-счетчик времени ничего не пишется. Индикатором последнего старта скрипта является время последнего изменения файла (файл открыл “w+” и сразу закрыл). Информацию о времени изменения файла получаем функцией filemtime.

В случае, если скрипт запускается “надолго”, непосредственный include приводит к увеличению времени выполнения скрипта для некоторых посетителей. Чтобы этого избежать, была реализована следующая схема:

Для “длительных” запусков использовался вариант с подгрузкой изображения через javascript :
document.write('<'+'img src="cronimg.php" alt="" />');

Скрипт cronimg.php отдает прозрачный gif-пиксель 1×1, умирает и… продолжает выполнение уже без соединения с браузером. Все дело в использовании register_shutdown_function (’cron_function’) - в параметре передаем имя нашей cron-функции, которая и будет выполнять требуемые действия.

Note:      Working directory of the script can change inside the shutdown function under some web servers, e.g. Apache.

Если в функции требуется работать с файлами, лучше использовать абсолютные пути (например, с использованием dirname(__FILE__)) - т.к. рабочий каталог внутри функции может измениться.

* Если сайт не особо посещаем, то, возможно выполнение скрипта с задержкой. Используя вместо конструкции javascript  -> img простой фрейм/iframe, мы добавим к “посетителям” поисковых роботов… (хоть некоторые роботы и обрабатывают картинки и даже из скриптов, текстовых пауков всё равно больше)… Однако, если и роботы не особо посещают Ваш сайт, то о “надежности” такого CRON-а можно забыть.

Некоторые из описанных конструкций можно использовать и в случае “стороннего” cron-а: сторонний сервер (примеры можно посмотреть на страничке у Never Lex-а) обращается к нужному файлу с нужной периодичностью, а обработка происходит уже у нас на хостинге.

При запуске длительных скриптов нельзя упускать из вида ограничения на время выполнения скрипта… Однако, и в этом случае можно “пойти на хитрости”.. Пожалуй, это тема для отдельной статьи.

10 PHP-функций, которые Вы, вероятно, никогда не используете:
http://infinity-infinity.com/2009/07/10-php-functions-you-probably-never-use/

Опубликовано Август 19, 2010 | автор: levik  |  Комментарий (1) »

CSS-framework - верстка на основе фреймворка

В последнее время накопившийся опыт (которого во многих областях более чем достаточно) преобразуется в различного вида framework-и (англ каркас, структура) - наборы готовых библиотек-файлов-шаблонов, которые можно взять за основу для дальнейшей доработки. Такая тенденция не обошла и CSS (Каскадные таблицы стилей) верстку.

Каждый, кому приходилось сталкиваться с версткой, скорее всего после двух-трех сверстанных макетов замечал, что многие элементы повторяются от сайта к сайту. И если вдруг возникло (вполне нормальное) желание вынести всё это в “шаблон” или “болванку” для верстки - знайте, Вы не одиноки!

Читать целиком »

Опубликовано Август 17, 2010 | автор: levik  |  Нет комментариев »

codeigniter - подборка ссылок

О PHP-фреймворке (англ. framework) Codeigniter можно услышать довольно много противоречивых мнений. Кто-то хвалит, кто-то ругает. Если отбросить субъективные (вроде “хороший-плохой”, причем как на уровне кода), то картина получается довольно-таки неплохая: скорость работы, низкие требования к ресурсам, “простота” и хорошая документация.

Однако как те, кто “за”, так и те, кто “против” сходятся в том, что  CodeIgniter или CI один из простых и наиболее удобных для изучения… Не только на мой взгляд:

У Codeigniter`a очень маленький порог понимания. В него можно вьехать буквально за 2-3 дня.

Есть мнение, что для “серьезных” проектов использовать его не стоит, однако, есть на просторах интернета несколько довольно нагруженных сайтов, на которых он вполне справляется с возложенными на него задачами.
Для желающих освоить CodeIgniter составил подборку ссылок. Благо, для этого фреймворка материала в русскоязычном интернете достаточно. Причем не только документация, но и примеры разработки приложений с его использованием. В общем, смотрите сами:

Подборка ссылок по CodeIgniter

http://codeigniter.com/ - официальный сайт CodeIgniter
http://codeigniter.com/ - CodeIgniter User Guide (ENG)
http://www.code-igniter.ru/forum/ - русскоязычный ресурс по CI
http://habrahabr.ru/blogs/codeigniter/ - Codeigniter на хабре

Примеры разработки на Codeigniter

http://www.simplecoding.org/category/code-igniter - написание багтрекера на CI
http://www.erum.ru/tags/codeigniter-blog/ - блог на CI “шаг за шагом”
http://www.codeigniter.org.ru/category/tema-materiala/primery-prilozhenii

Коллекции ссылок по CI

http://blog.termit.name/codeigniter/ - большая (нет, просто ОГРОМНАЯ) коллекция ссылок по CodeIgniter - спасибо ТермитУ
http://vizor-it.net/2009/12/28/43-codeigniter-framework-tutorials-links/ - 43 примера использования CodeIgniter
http://www.rlmseo.com/blog/codeigniter-library-80-free-addons-tutorials-and-videos/ - 77 фишек для Codeigniter

В принципе, имея базовые представления о PHP при желании, освоить (не в совершенстве, но вполне…) CodeIgniter с имеющимися примерами-туториалами-описаниями и документацией (качественная и переведенная документация- один из огромных плюсов CodeIgniter) можно “буквально за 2-3 дня”.

Удачи в освоении CodeIgniter!

upd заметки
http://data-based-systems.com/articles/papers/CodeIgniterNotes.html

Опубликовано Август 16, 2010 | автор: levik  |  Нет комментариев »

MODx - шпаргалка по установке и настройке

Решил собрать в одном месте краткое руководство по настройке MODx. Сразу оговорюсь, что на полноту изложения не претендую - на то и шпаргалка.. И подойдет она для сайтов без специфичного функционала (там уж кто на что горазд). И да.. шпаргалка по MODx Evolution 1.0.4 (скорее всего, подойдет и для других версий MODx EVO)

Установка MODx

При установке MODx особых трудностей возникнуть не должно - автоматический установщик отлично справляется со своими обязанностями. Кроме того, по умолчанию выбраны для установки все элементы (плагины-чанки-сниппеты…). Пример сайта я обычно не устанавливаю, хотя он может оказаться полезным для изучения (как раз в качестве примера). Единственное, что хотелось бы отметить - это

  • переименовать файл ht.access в .htaccess и раскомментировать строки register_globals и AddDefaultCharset

Настройка MODx

  • Создать шаблон(ы);
  • Создать помимо главной (по умолчанию с ID 1) 404 (403) страницу;
  • Указать (проверить) абсолютные и относительные пути для файл-менеджера и редактора (Путь к файлам, URL к файлам и Путь для файл-менеджера), установить разрешения на запись в каталог;
  • Настраиваем транслитерацию имени для загружаемых файлов;
  • Настраиваем транслитерацию URL (плагин TransAlias)
  • Обычно ставлю плагин Seo strict URLs - склеивает дубли страниц перенаправлением на “основной” алиас, убирает alias главной страницы (minimal-base по умолчанию) в wayfinder-меню и хлебных крошках;
  • Если испольуем ЧПУ, то следует проверить в шаблоне внутренних страниц наличие <base href=”[(site_url)] “></base> - облегчает настройку работы с загруженными файлами;
  • Отключаем вывод сообщений об ошибках на рабочем сайте
  • Если на сайте используется JQuery, следует отключить автозагрузку JQuery в плагине QuickManager (Load JQuery in front-end). В сниппетах могут задаваться параметры для отключения JQuery.
  • Служебные документы можно защитить от редактирования, используя mm_widget_accessdenied- виджет “Доступ запрещен”. При необходимости, можно скрыть или настроить отображение практически любых полей для каждого документа и каждого пользователя (роли)

Много полезных советов по настройке MODx можно найти у e-KAO, однако следует помнить, что создание различных сборок MODx не поощряется разработчиками… Используйте её для собственных нужд ;)

Опубликовано Август 13, 2010 | автор: levik  |  Комментарии (9) »

MODx - плагин TransAlias - автоматическая транслитерация адресов

В CMS/CMF MODx для автоматической транслитерации URL-ов страниц в комплект входит плагин TransAlias. Однако, по умолчанию настроен он так, что позволяет добавлять URL-ы, содержащие и русские буквы.

Для транслитерации русских букв в строке URL адреса следует произвести небольшую настройку плагина. А именно - заходим на вкладку “Конфигурация” (Элементы - Управление элементами - Плагины- TransAlias (8) - 1.0.1 Human readible URL translation supporting multiple languages and overrides), и выбираем значение “russian” для параметра Trans table Читать целиком »

Опубликовано Август 12, 2010 | автор: levik  |  Комментарии (4) »

Текущее время на этом компьютере и текущее время в сети отличаются друг от друга

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

Текущее время на этом компьютере и текущее время в сети отличаются друг от друга. Дополнительные сведения о свойствах даты и времени можно найти в центре справки и поддержки. Чтобы выполнить вход, обратитесь к системному администратору.

Такое сообщение возникает, если настройки безопасности сервера не разрешают вход компьютерам, у которых время (и дата) отличается от доменного по умолчанию более чем на 5 минут.

Команда net time в этом случае работать не будет - увидим похожее сообщение об ошибке текущего времени и (или) приписку “Отказано в доступе”

Разовое решение проблемы - загрузка под локальным администратором (смена пользователя без перезагрузки) или же перезагрузка с заходом в BIOS. Следует проверить время (и дату) на этом компьютере и в сети (на сервере).

Иногда, если у пользователя достаточно прав, он может случайно (или специально) изменить дату на компьютере. Однако, иногда причиной сбоя даты может являться батарейка BIOS (если дата сбрасывается далеко в прошлое, особенно после отключения от сети - обязательно проверьте батарейку.) или другие неполадки (иногда компьютер загружался с точным временем и неточной датой)

Как вариант - можно вывести-ввести рабочую станцию в домен.

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

Опубликовано Август 11, 2010 | автор: levik  |  Нет комментариев »

CSS - прижать футер к низу

Согласитесь, довольно часто, если сайт занимает не всю  высоту окна, то “висящий” подвал-футер смотрится не очень. Гораздо лучше смотрится “прибитый” к нижней части окна подвал, который в случае увеличения количества текста просто съезжает ниже.

Как прижать футер к низу?

Основным способом прижатия футера к нижней части страницы является задание высоты одного из HTML- элементов равной 100%. Дальше - идут вариации.

1. Можно задать высоту html,body равной 100%, футер делаем абсолютно позиционируемым и отступ от низа делаем нулевым (position:absolute;bottom:0; height:30px;). Чтобы футер не перекрывался или не наезжал на основной контент - делаем внутренний отступ у блока контента равный высоте подвала (padding:30px;)

2. Основной блок (content) растягивается на всю высоту, а footer за счет отрицательного верхнего отступа (margin-top:0) “всплывает” над content-ом.

3. вариант с отрицательными margin и футером с clear:both (http://dimox.name/press_footer_bottom_with_css/#comment-209)

В любом случае окончательную верстку желательно проверить на кроссбраузерность - почти наверняка без “хаков” или дополнительных css-правил не обойдется. В частности, будьте осторожны с IE

http://www.w3school.ru/blog/css/sticky-footer.html
http://xhtml.ru/2005/10/18/footer-stick/ (второй вариант)
http://dimox.name/press_footer_bottom_with_css/
http://webmolot.com/prizhimaem-futer-k-nizu/

UPD Будьте внимательны - разные версии одного и того же браузера opera по-разному отображают приклеенный к низу футер (в частности, проблемы, если не ошибаюсь с Opera 9.63)

Опубликовано Август 9, 2010 | автор: levik  |  Нет комментариев »