26декабря,
2011
Не пилите ёлки!

Александр Бычков придумал и нарисовал забавный проект для любителей природы, а точнее для тех, кому не по фиг судьба спиливаемых ежегодно в огромных количествах ёлках. Хорошая затея.

Я этот проект сверстал и слегка припорошил скриптами.

Голосуйте «за» или «по фиг». Можно ещё и майку купить.

11ноября,
2010
Удобное редактирование ключевых слов (keywords) в Modx Evolution

В Modx Evolution редактирование ключевиков вынесено в отдельный таб, что, например, мне неудобно. Проще, когда прямо при редактировании документа можно их указать и сохранить документ.

Для этого понадобится всего пара штук:

1. TV-параметр. Назовём его «keywords». Это должен быть тип Text, остальное не подходит. Назначить этот TV всем документам, где должны быть ключевые слова.

2. Установленный плагин Managermanager (он уже предустановлен в релизах, начиная с версии 1.02 вроде, последняя сейчас 1.04, так что проблем с этим быть не должно).

3. Добавить всего одну строчку в mm_rules (описание правил для Managermanager):

mm_widget_tags('keywords');

4. В <head> поставить вот такую строчку:

<meta name="keywords" content="[*keywords*]">

Этот виджет для Managermanager-а позволяет собирать вводимые на сайте теги, но никто не мешает использовать его для сбора, например, ключевых слов. Вводимое новое слово в любом документе в этом TV, потом отображается уже, как слово из выборки, по которому можно просто кликнуть, выглядеть это должно примерно так:

Итого, всё создали, это самая простая настройка, означает, что, где бы ни появился этот TV, он везде будет работать, как сборщик вводимых слов.

На мой взгляд, такой вариант куда удобней, чем лазить в отдельный таб и там ковыряться с ключевиками. Тем более, что не пришлось ничего дописывать самостоятельно, всё уже есть предустановленное.

Более подробно о виджете «mm_widget_tags» есть в документации на русском.

11сентября,
2010
Чтобы было

Пост «от нечего написать, нет времени строчить долго и умно»:
Вот такая вот жёлтая хренотистика, хорошо смотрится:

Ничего, 17-го сентября приезжают старые блэк металлисты Marduk (всегда их терпеть не мог), надо сходить посмотреть на пафосных злобных шведов, небось, накрашенные будут, ну, как обычно, в лучших традициях. Ещё пара групп с ними — шведская и норвежская банды. В принципе, тоже самое — тру блэк типа.

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

Кому интересно, ссылка на сайт клуба, где мероприятие будет (время и всё такое):
http://www.firebar.lv/index2.php?page=events&eid=1621

18июля,
2010
Ну и я ступил на скользкий путь

В общем, терпение, конечно, у меня объёмистое очень, до последнего, а потом прорывает.

За сим, наконец-то решился отказаться от поддержки IE6. Я там уже просто наизусть знаю тонну багов и всегда стараюсь верстать, чтоб они не вылезли при тестировании макетов, но всякие разные интересные штуки, которые спокойно делаются в ие7-8 итд итп, а в ие6 не работают — да и хуй с ним, с этим IE6. Достал.

Буду требовать денег за поддержку динозавра позапрошлой эпохи интернета.

Заноза в заднице, больной зуб разработчика.  Ещё надо какое-нибудь всплывающее окошко вешать на сайты с издевательскими текстами.

17июня,
2010
Soulfly в Лиепае

Сходил в понедельник, 14 июня на концерт Soulfly в клубе Fontaine.

До последнего момента не верилось, что приедут, уж слишком известная команда для такого маленького клуба. Но, ничего, появились, отыграли на ура, публика их очень хорошо встретила, играли свои песни и старые песни Sepultur-ы тоже.

В целом, прошло всё очень здорово, народу, правда, набилось много, но ни драк, ни каких либо нездоровых эксцессов не было. Жаль только, что после концерта пришлось просыпаться во вторник, а не в субботу. Не самый удачный день для такого мероприятия, но в рамках тура особо не выбирают. Во вторник они уже радовали эстонскую публику, так что там в среду проснулись, наверное, с похожими мыслями.

Всякие майки, диски и прочее, конечно, стоило очень прилично. Ну, как обычно на концертах.

На разогреве играла цесиская metalcore/hardcore-группа Enhet. Никогда их раньше не слышал, а играют хорошо. Слаженно и звучно.

Побольше бы таких концертов, правда, окупаемость их под большим сомнением.

31мая,
2010
Вся мелочь со страниц сайта в одном документе при помощи Ditto

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

Самый простой вариант: Забить их жёстко и не давать менеджеру сайта возможность их редактировать.

И другой вариант: Все необходимое собрать в одном документе, вписать в TV-параметры и вызывать в нужным местах.

Выглядит это примерно так:
Делается шаблон Settings (можно его оставить пустым), cоздаётся документ в дереве сайта, тоже Settings (Я так его называю, чтобы сразу было понятно, что и для чего он), отключается отображение в меню, тогда не вылезет нигде в меню, присваивается шаблон, описанный выше, этому шаблону назначаются все необходимые TV-параметры. Их можно заполнить заранее или потом.

А в шаблоне любой страницы сайта пишется вызов Ditto, где будет, например, блок контактной информации:

[[Ditto? &documents=`20` &tpl=`settings`]]

Кэшируемый вызов Ditto, из документа Settings, у которого, ID-номер, например, 20, вызывается всё необходимое, tpl — шаблон для вывода на страницах сайта.

Шаблон вывода может выглядеть так:

<div>
<h3>[+longtitle+]</h3>
<p>[+introtext+]</p>
</div>

Заголовок для блока берётся из поля Longtitle, а сама контактная информация из Introtext-а. Достаточно заполнить их только в документе Settings, и они будут везде отображаться одинаково. И у клиента будет возможность самостоятельно их поменять, не придётся копаться, ни в чанках, ни в TV-параметрах или просить разработчика это сделать.

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

26мая,
2010
Финал «Lost-а» нулевой

«Затерянные» он, наверное, называется, потому что сценаристы мудрили, мудрили, да затерялись в том, что напридумывали.

Кучу всего оставили необъяснённым, свели всё к сопливой прощальной сцене, скользко так уйдя от многих корневых тем сериала.

И этим пудрили мозги 6 лет. Обидно.

4 8 15 16 23 42

23мая,
2010
Олег Никитин — «Корабельщик»

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

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

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

Казалось бы, это фентези, взять любой мир, абстрагироваться от того, что это уже всё изобретено, да написать новую реальность, в которой это ещё не случилось, но автор, доведя повествование до конца, приятно удивил, оправдал этот мир и его «тёмных» обитателей. Рассказал много о технических сторонах (достаточно, чтобы не превратить книгу в технический справочник по дирижаблю или ледоколу), хорошо раскрыл характеры персонажей, не избегая обычной истории взрослеющего парня, проходящего привычные, почти для каждого, этапы жизни.

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

Отдельно хочу отметить описание политических строев. Автор пошёл по проторенной дорожке, описывая развитие государства на живых в нашем мире примерах. На мой взгляд — это очень правильно. История циклична, любое государство, с чего бы оно ни начинало, всё равно будет переживать спады и взлёты. Сравнивая развитие разных стран, находится очень много общего. Не выдумывая утопических моделей, моделей, которые могли бы быть (как правило, «могли бы» означает, что никогда не будут), автор сложил чёткую картину на предыдущем опыте.

В целом, могу сказать, что Олег Никитин аккуратно создал мрачный и достаточно детально описанный мир, в который органично вписал персонажей. Уклад жизни и желание понять «Зачем это всё» привело роман к логическому концу, не обрывая его на полуслове.

Написано для сайта «Снежный Ком»

15мая,
2010
Ошибка в ManagerManager в версии 0.3.8

В последней версии ManagerManager, которая идёт с дистрибутивом Modx-а 1.0.3, обнаружилась ошибка:
mm_hideTemplates работает корректно только в Firefox-е. В остальных браузерах список шаблонов остаётся прежним и ничего не скрывается.

На официальном форуме предложили решение:
В файле /managermanager/functions/templates.inc.php заменить:

foreach ($tplIds as $tpl) {
$output .= 'if ($j («select#template»).val () != '.$tpl. ') { '. «\n»;
$output .= '$j ("select#template option[value='.$tpl.']").hide ();' . «\n»;
$output .= '}' . «\n»;
}

на:

foreach ($tplIds as $tpl) {
$output .= 'if ($j («select#template»).val () != '.$tpl. ') { '. «\n»;
$output .= '$j ("select#template option[value='.$tpl.']«).remove ();' . „\n“;
$output .= '$j („select#template optgroup:not (:has (*))“).remove ();' . „\n“;
$output .= '}' . „\n“;
}

Также в файле /manager/actions/mutate_content.dynamic.php на строке 585 исправить на:

<optgroup label=»blank">
<option value="0">(blank)</option>

Что поможет избежать других проблем, потому как тег <optgroup> не указан.

Проверил, работает в Chrome, Opera и IE. Более того, Opera вылетала постоянно при попытке редактировать документ, после внесения исправления стала работать корректно.

1мая,
2010
Проблема с AjaxSearch в связке с YAMS в Modx

Как оказалось, AjaxSearch нигде и ничего не ищет, когда системные поля Modx-а YAMS заменяет на TV-параметры.

На официальном форуме предлагается решение в подробностях, которое у меня так и не заработало. Всё это делалось на версии Modx Evolution 1.0.3.

А нашлось оно совершенно случайно (как обычно, впрочем). Надо было поставить чуть постарше версию AjaxSearch-a.

А именно версию 1.8.4. Она лежит в Previous Releases AjaxSearch-a.
Либо вот прямая ссылка на неё.

Как выглядит сам вызов:

На всех страницах сайта (ну, или на тех, где поле для поиска нужно) разместить вызов сниппета:

[!AjaxSearch? &parents=`0` &mbstring=`0` &AS_landing=`25` &addJscript=`0` &extract=`0` &AS_showResults=`0` &ajaxSearch=`0` &language=`(yams_mname)` &withTvs=`+:pagetitle_en,longtitle_en,introtext_en,description_en,content_en,pagetitle_ru,longtitle_ru,introtext_ru,description_ru,content_ru` &tplLayout=`search_tpl`!]

mbstring я отключаю сразу, оно у меня не работает. Поиск без перезагрузки я не проверял, он не нужен мне в 99%, а то и во всех 100% случаев, вроде как он всё равно корректно не работает. Ну, а дальше, собственно, куда будет выводиться результат поиска, на каком языке будет всё описание и, то, по каким полям AjaxSearch будет искать. Ну и сами TV-параметры, которые создаёт YAMS и не находит AJAxSearch.

Шаблон формы поиска стандартный:

[+as.showForm:is=`1`:then=`
<form [+as.formId+] action=[+as.formAction+]«„ method=“post»>
<fieldset>
<input type="hidden" name="advSearch" value=[+as.advSearch+]«„ />
<label for=“ajaxSearch_input»>
<input id="ajaxSearch_input" type="text" name="search" value=[+as.inputValue+]«[+as.inputOptions+]„ />
</label>
<label for=“ajaxSearch_submit»>
<input id="ajaxSearch_submit" type="image" src=[(site_url)]«images/search.gif» name="sub" value=[+as.submitText+]«« />
</label>
</fieldset>
</form>
`+]
[+as.showIntro:is=`1`:then=`
<p id="ajaxSearch_intro">[+as.introMessage+]</p>
`+]
[+as.showResults:is=`1`:then=`
[+as.results+]
`+]

Страница вывода результатов:

[!AjaxSearch? &mbstring=`0` &AS_showResults=`1` &ajaxSearch=`0`, &AS_landing=`25`, &AS_showForm=`0` &language=`(yams_mname)` &withTvs=`+:pagetitle_en,longtitle_en,introtext_en,description_en,content_en,pagetitle_ru,longtitle_ru,introtext_ru,description_ru,content_ru` &tplResult=`searchresult_`!]

Шаблон вывода результатов:

<a href=»(yams_doc:[+as.id+])» title=[[YAMS? &get=`content` &from=`pagetitle` &docid=`[+as.id+]«`]]»>[[YAMS? &get=`content` &from=`pagetitle` &docid=`[+as.id+]`]]</a>
[+as.descriptionShow:is=`1`:then=`
<span>[+as.description+]</span>
`+]
[+as.extractShow:is=`1`:then=`
<div><p>[+as.extract+]</p></div>
`+]
[+as.breadcrumbsShow:is=`1`:then=`
<span>[+as.breadcrumbs+]</span>
`+]

Тут стоит обратить внимание, что вызовы плейсхолдеров AjaxSearch-а заменяются на вызовы сниппета YAMS.

Чтобы ссылка работала верно, она обязательно должна быть заменена на (yams_doc:[+as.id+])

Ну, а показать title или заголовок, то надо вызывать сниппет YAMS:

[[YAMS? &get=`content` &from=`pagetitle` &docid=`[+as.id+]`]]

Такой поиск работает корректно, ищет и находит и правильно ссылается на страницы из результатов поиска.

предыдущие 10 записей →