+20.37
Рейтинг
45.51
Сила

One Delta Ten Tango

Покалымлю на разрешении конфликтов плагинов

Превед.
Решил немного покалымить.
  1. Если есть что-то срочное, на живую на рабочем сайте готов подебажить и разрешить конфликты любых плагинов с открытым исходным кодом.
  2. Пооптимизирую и понастраиваю сервера (не виртуалки и не обыкновенные шаред хостинги). Настраиваю MySQL, утраняю падучесть сервисов, гадаю по логам.
Прайс почасовой в профиле, аська там же.
Жду заказов :)

Конвертафция путей в MySQL дампе для переноса на новый сервер

convert_paths.php
<?php

// старый путь
$old = '/var/www/looksochi/data/www/somesite.ru/';
// новый путь
$new = '/sites/rebirth/somesite.ru/';

// исходный дамп
$input = fopen('dump.sql','r');
// выходной файл
$output = fopen('dump_new.sql','w');

function rs($r){
    global $old, $new;
    return $r[1].( $r[2] + (strlen($new)-strlen($old)) ).$r[3];
}

while(($s = fgets($input)) !== false){

    $s = preg_replace_callback('#(s\:)(\d+)(\:\x5C"'.preg_quote($old,'#').')#ms', 'rs', $s);

    $s = str_replace($old, $new, $s);

    fwrite($output, $s);
}

fclose($input);
fclose($output);


$
php -f convert_paths.php

Проблема с javascript-маркерами в FireFox

Заметил лажу в лисе. Ест маркеры. Даже строчные типа:
function (){
...
'*marker1*';
...
}


=(

Какая-то умная стремная минимизация яваскрипта появилась.
В консоли фаербага пишу:
>>> window.trololo=function(){/*bebe*/; alert(1); '*bebe2*'; };
function()
>>> window.trololo.toString();
"function () { alert(1); }"


Наглость мля =((( надо думать, что делать с маркерами, а то инъекции не выполняются.

Ковальски, варианты!

Рекомендация к использованию: Наследование шаблонов

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

Коротко о файлах в примере (ссылка на архив внизу):

  • topic.prototype.tpl — прототип топика, содержащий всю повторяющуюся разметку. Использованы вложенные конструкции типа
    {block name=...}
  • topic_link.tpl, topic_photoset.tpl, topic_question.tpl, topic_topic.tpl — файлы, наследующие и заменяющие/дописывающие некоторые блоки прототипа топика (topic.prototype.tpl)
  • topic.social.tpl — включение с кодом кнопочек публикации в разные соц-сети.


Коротко о содержании файлов:

Посмотрев файлы примера, не сложно заметить, что файлы topic_*.tpl содержат:
  1. в начале каждого файла наличиствует код
    {extends file=topic.prototype.tpl}
  2. минимум специфической разметки, обрамленной в конструкции
    {block name=... флаг}
    — это замены и дополнения блоков. Флаг может либо отсутствовать (что означает полную замену содержимого блока), либо принимать принимать значения:
    • append — дописывает в конец содержимое блока к наследуемому блоку.
    • prepend — дописывает в начало содержимое блока к наследуемому блоку.
    • hide — скрывает блок (насколько я понял, если добавить в блок прототипа, то по умолчанию блок будет скрыт).
    • nocache — запрещает кеширование содержания блока (а это вообще актуально для LS?).


Документация


ZIP-архив с примером

QipSmiles hotfix (docker47.free.fr browser warning)

Замена смайл-пака maliste

smiley.s3.amazonaws.com/maliste.zip
Распаковать в qipsmiles/smiles/ с заменой файлов.

MySQL комманды для замены смайлов в уже сохраненном контенте




На 0:50 видно окошко, в котором надо вписать эти комманды:
update `prefix_topic_content` set `topic_text`=replace(`topic_text`,'http://moktoipas.com/smileys/','http://smiley.s3.amazonaws.com/maliste/');
update `prefix_topic_content` set `topic_text`=replace(`topic_text`,'http://docker47.free.fr/divers/smileys/basic/','http://smiley.s3.amazonaws.com/maliste/');
update `prefix_topic_content` set `topic_text`=replace(`topic_text`,'http://docker47.free.fr/divers/smileys/_MSN/','http://smiley.s3.amazonaws.com/maliste/');
update `prefix_topic_content` set `topic_text`=replace(`topic_text`,'http://docker47.free.fr/divers/smileys/_gg3d.com/','http://smiley.s3.amazonaws.com/maliste/');

update `prefix_topic_content` set `topic_text_short`=replace(`topic_text_short`,'http://moktoipas.com/smileys/','http://smiley.s3.amazonaws.com/maliste/');
update `prefix_topic_content` set `topic_text_short`=replace(`topic_text_short`,'http://docker47.free.fr/divers/smileys/basic/','http://smiley.s3.amazonaws.com/maliste/');
update `prefix_topic_content` set `topic_text_short`=replace(`topic_text_short`,'http://docker47.free.fr/divers/smileys/_MSN/','http://smiley.s3.amazonaws.com/maliste/');
update `prefix_topic_content` set `topic_text_short`=replace(`topic_text_short`,'http://docker47.free.fr/divers/smileys/_gg3d.com/','http://smiley.s3.amazonaws.com/maliste/');

update `prefix_comment` set `comment_text`=replace(`comment_text`,'http://moktoipas.com/smileys/','http://smiley.s3.amazonaws.com/maliste/');
update `prefix_comment` set `comment_text`=replace(`comment_text`,'http://docker47.free.fr/divers/smileys/basic/','http://smiley.s3.amazonaws.com/maliste/');
update `prefix_comment` set `comment_text`=replace(`comment_text`,'http://docker47.free.fr/divers/smileys/_MSN/','http://smiley.s3.amazonaws.com/maliste/');
update `prefix_comment` set `comment_text`=replace(`comment_text`,'http://docker47.free.fr/divers/smileys/_gg3d.com/','http://smiley.s3.amazonaws.com/maliste/');


После выполнения mysql-комманд не забудьте сбросить кеш объектов


Если что-то ну никак не получается, обращайтесь в аську (она в профиле написана).

Удаление UTF-8 BOM из консоли

linux (debian tested)
find путь/к/лайвстриту/ -type f \( -name '*.tpl' -o -name '*.php' \) -exec sed -i '1 s/^\xef\xbb\xbf//' {} \;


freebsd (7.2 tested)
find ./ -type f \( -name '*.tpl' -o -name '*.php' \) -exec sed -i -e '1 s/^\xef\xbb\xbf//' {} \;


найти файлы с BOM
find ./ -type f \( -name '*.tpl' -o -name '*.php' \) -print0 | xargs -0r awk '/^\xEF\xBB\xBF/ {print FILENAME}{nextfile}'


sed почему-то иногда не отрабатывает, поэтому php, find, awk, xargs:
php -r "ob_start();
passthru('find ./ -type f \( -name \'*.tpl\' -o -name \'*.php\' \) -print0 | xargs -0r awk \'/^\xEF\xBB\xBF/ {print FILENAME}{nextfile}\'');
foreach(array_filter(explode(\"\n\",ob_get_clean())) as \$f){
	echo \"remove BOM from \$f...\n\";
	file_put_contents(\$f, substr(file_get_contents(\$f), 3));
};"

Репозитории бесплатных расширений

Что здесь?

Стихийный список открытых репо на github и google-code (и прочих), в которых можно принять участие (форкнуть, модифицировать).

Оставляйте в комментах ссылки, а я буду добавлять их в топик.

Оглавление


Читать дальше →

Есть мысль. (шаблоны, javascript)

Те части яваскриптов, что в шаблонах повторяются гарантированно, вынести в /engine/lib/internal/template/ с названиями
  • main.core.js
  • comments.core.js
и т.д.

А в шаблонах переопределять лишь необходимые части. В том числе, возможно, и с помощью ls.hook.inject вносить всякие незначительные поправки.

Мне кажется, верстальщикам будет больше счастья от этого
+ поддержка шаблонов станет проще

Некоторые ньюансы совместимости будущей версии XText для ветки LiveStreet 0.5

  • будет работать только на jquery-шаблонах
  • jquery-шаблоны должны будут в полной мере поддерживать список js-хуков и маркеров, которые мне понадобятся (полный список еще не отработан)
  • поддержки tinymce традиционно не предвидится
  • «из коробки» редактор будет поддерживаться только markItUp

вышеперечисленные моменты — отправная точка, без которой ничего не выйдет.

upd 18.01.2012

Разослал покупателям мыло со ссылкой на дев-релиз.
  1. я наверное победил глюки с делегированием и наследованием ;)
  2. карты теперь подгружаются асинхронно
  3. всё переписано на jquery
  4. требуются правки текущих версий шаблонов (см. мои коммиты с 20 декабря)
  5. в блоке «мои файлы» появилась вкладка «загрузить», список разрешенных расширений в основном конфиге (строки 45,46)
  6. иконочки почти все из tango (претти кул, мля)
  7. все кнопочки на панели собраны в дропдаун-менюшку

upd 19.01.2012

  1. откатан шаблон street-spirit на 2397.ru
  2. пофиксил пару мелких багов в js и отправил пулл-реквесты в на гитхаб

upd 20.01.2012

  1. наконец-то добавлен слой яндекс-карты

upd 21.01.2012

  1. откатан шаблон new-jquery на 4newpeople.com
  2. пофиксен баг в шаблоне тега toc (оглавления)

upd 23.01.2012

  1. мини-фикс совместимости с sitemap
  2. мои правки наконец-то склеены с основной веткой livestreet'а ;) а это значит, что 0.5.2 будет гарантированно поддерживать xtext