pharaon

Дерева вы мои, дерева...

Есть дерево сообщений. Организованное, вестимо, в SQL.

Надо бы его отобразить в шаблон. Как это сделать рекурсивно с помощью TT, VIEW кувалды и чьей-то матери я понял.

Но.

1. Хочется как-то внятно контролировать количество показываемых сообщений
2. Хочется понять, как бы еще можно было сделать ЭТО.

Есть ли у кого идеи? Нечто о предвычислении размера ветки у меня есть, но пок

Инструментарий, есличто, Catalyst, DBIx::Class. DBIx::Class::Tree я, если честно, не понял. В ситуации, когда с деревом не нужно много манипулировать на изменение, не вижу от него большой пользы.
Рыжий

Catalyst::Model::DBI с поддержкой UTF-8

Практика показала, что использование DBIx::Class не всегда оправдано — трудно писать сложные запросы, да и количество выполняемых им лишних телодвижений удручает.

Среди альтернативных вариантов — использование DBI. Для него, естественно, на CPAN уже есть модель Catalyst::Model::DBI, однако её хелпер создаёт модуль, который (при работе с MySQL) не дружит с UTF-8. Что вполне поправимо: достаточно добавить в настройки подключения атрибут mysql_enable_utf8 и переопределить метод connect, добавив туда выполнение запроса SET NAMES utf8

Готовый вариант модели — https://gist.github.com/752990
  • Current Mood
    bouncy пора домой!
  • Tags
dead horse
  • tarkhil

Грабли в Catalyst и/или URI::Escape::uri_unescape

Разбираясь в старой, но живой проблеме (пути из нескольких частей - /вот/такие - превращались в частично - до последней части - дважды UTF'нутые) в MojoMojo, я нашел место сбоя.

Путь передается ЧАСТИЧНО в %-кодированном виде (/%D0%B2%D1%82%D0%BE%D1%80%D0%BE%D0%B9_%D1%81%D1%82%D0%B5%D0%BD%D0%B4/чтототакое), возможно, это какие-то причуды javascritpt'а. В любом случае, %D0 и так далее воспринимается как НЕ UTF, и перекодируется в UTF. Результат получается достаточно страшен.

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

Проблема проявляется в районе 176 строки MojoMojo::Schema::ResultSet::Page.
Рыжий

YAML — проблемы переноса каталистового сайта

Пытаюсь переносить каталистовое приложение на новый сервер. Приложение должно читать свой конфиг из YAML-файла. При попытке запуска тестового сервера получаю сообщение об ошибке:
Error parsing /path/to/appname.yml: YAML::XS::Load Error: The problem:

    mapping values are not allowed in this context

was found at document: 1, line: 9, column: 11
Похоже, YAML::XS::Load ругается на строки:
rev: $Rev: 2211 $
date: $Date: 2010-05-04 17:27:58 +0600 (вт, 04 май 2010) $
При этом скрипт
perl -0777 -n -MYAML -MData::Dumper -e 'my @data=Load($_); print Dumper(@data)' appname.yml
успешно читает такой файл:
$VAR1 = {
        ...
        'rev' => '$Rev: 2211 $',
А скрипт, где -MYAML заменено на -MYAML::XS — нет.

Вроде, данные, о которые споткнулся YAML::XS::Load, мне не нужны — пока закомментировал их. Но сам факт такого поведения мне не нравится :-\

ОС в обоих случаях почти одна и та же — FreeBSD (правда, разных версий). YAML — 0.68 и 0.71. На старом сервере YAML::XS не установлен.

Deflators в FormFu

Здравствуйте.

Моя задача:
В базе данных в таблице есть поле типа SET. Хочется иметь для каждого элемента этого множества свой checkbox, которые были бы объединены в checkboxgroup.

В конфиг-файле формы я сделал такое поле:
<elements>
    name        flags
    type        Checkboxgroup
    label       Flags
    deflators   "+xxx::yyy::flags"
    <options>
      value     r_view
      label     user can view
    </options>
    <options>
      value     r_create
      label     user can create
    </options>
</elements>

xxx::yyy:flags - мой класс дефлятора, наследует от HTML::FormFu::Deflator. В него в качестве параметра поступает строка с флагами (например, "r_view,r_create"), установленными для данного row таблицы. Дефлятор должен сделать каждый чекбокс помеченным/непомеченным в зависимости от флагов.

Проблема:
что бы я ни делал в этом дефляторе с чекбоксами, этого не видно при выводе формы. Похоже, нужно как-то заставить форму понять, что я в ней что-то поменял, только я не знаю, как.
Дефлятор точно вызывается (проверял вставляя туда die) в процессе рендеринга темплейта.

Core дефляторы, которые выполняют похожую функцию (например, CompoundSplit), используют для каждого поля, которое они меняют, функцию $field->default(...). Но в checkboxgroup каждый чекбокс - это не field и вообще не класс, а просто хеш (не blessed). Так что не получается вызвать для каждого чекбокса функцию default.

Может, есть готовый пример на эту тему? Или какие-нибудь соображения?
Возможно, я вообще не тем путём пошёл, и это нужно делать не через инфляторы/дефляторы, а как-то по-другому?

Как организовать долговременный процесс в Catalyst

Обрисую задачу. Есть файлы размером около 300-400 метров текста, их необходимо загружать в базу. Подскажите, плиз, как можно реализовать такой процесс (желательно фоновый) на каталисте? В архивах модулей нашел Catalyst::Plugin::Scheduler, как вариант, подойдет, но хочется чтоб задача ставилась при нажатии на кнопку.